На regexr.com Я разработал регулярное выражение, которое соответствует определенным типам собственных имен. Вот выражение:Правильное выражение Python не соответствует всем ожидаемым словам
\b([a-z]?[A-Z]+[\w]*[ ]*)+\b
Вы можете видеть, что жить с многочисленными примерами, совпадающим, как ожидается, в http://regexr.com/3bifh
Э.Г. из строки Моби Дик или Белый Кит Герман Мелвилл это соответствует Moby Dick
, White Whale
и Herman Melville
Я пытаюсь воспроизвести это в Python, с меньшим успехом. Вот код:
import re
text = "Moby Dick or the White Whale by Herman Melville"
print(re.findall(r"\b([a-z]?[A-Z]+[\w]*[ ]*)+\b", text))
Выход:
['Dick ', 'Whale ', 'Melville']
Это соответствует только последнюю часть каждого результата сверху. Почему выражение не работает в Python?
Все, что выделены на странице regexpr.com скрипку. –
«Возможно, это строчная буква, затем одна или несколько прописных букв, а затем необязательно больше букв и, возможно, пробел» - не работает ли это регулярное выражение в «\ w +» или я что-то упускаю? –
Вы имеете в виду r "\ w +"? Нет. Я пытаюсь совместить собственные имена/аббревиатуры, такие как «Соединенные Штаты», «США», «Моби Дик», «Эдгар Аллен По» или «iPhone». Ключевой частью является буква верхнего регистра. –