Форум сайта python.su
Задача выловить регулярными выражениями слова, начинающиеся с больших букв, находящиеся не в начале предложения.
Например
re.findall(regexp, "Hi, Nick. How are you doing? Are you going to Kyiv next week?") = ['Nick', 'Kyiv']
regexp='(?!^|\.\s?|\!\s|\?\s?)+[A-Z]{1,}[a-z]?'
Офлайн
regexp="([A-Z]\w+)"
['Hi', 'Nick', 'How', 'Are', 'Kyiv']
Отредактировано (Июль 8, 2011 12:05:30)
Офлайн
diam123Да, да, именно не в начале предложения.oops, недосмотрел “не в начале предложения”regexp="([A-Z]\w+)"
['Hi', 'Nick', 'How', 'Are', 'Kyiv']
P.S. http://www.addedbytes.com/download/regular-expressions-cheat-sheet-v2/png/
Офлайн
smirnoffsЕсли брать указанную вами строку, то:
Да, да, именно не в начале предложения.
regexp="[^\.\?\!] ([A-Z]\w+)"
Отредактировано (Июль 8, 2011 12:20:16)
Офлайн
diam123Пробел может стоять, а может и не стоять. А еще их может быть два. Как тогда?smirnoffsЕсли брать указанную вами строку, то:
Да, да, именно не в начале предложения.Но это сильно накладывает ограничения, такие как:regexp="[^\.\?\!] ([A-Z]\w+)"
Предложение должно заканчиваться на . или ? или !
Перед нужными словами обязательно должен стоять пробел…
Офлайн
smirnoffsВы бы больше примеров дали, батенька :)
Пробел может стоять, а может и не стоять. А еще их может быть два. Как тогда?
regexp = u"[^\.\?\!\$][\s|\S]([A-Z]\w+)"
Офлайн
Пример
re.findall(regexp, "We are going to visit Cambridge (California, US) next week. Would you join?") = ['Cambridge','California','US']
Офлайн
>>> s = "Hi, Nick! How are you doing? Are you going to Kyiv next week?"
>>> p = re.compile(r"(?<!^)(?<![.!? ])(?:\s*)([A-Z][a-zA-Z]+)", re.M)
>>> p.findall(s)
['Nick', 'Kyiv']
>>> s = "We are going to visit Cambridge (California, US) next week. Would you join?"
>>> p.findall(s)
['Cambridge', 'California', 'US']
Офлайн