Уведомления

Группа в Telegram: @pythonsu

#1 Июль 8, 2011 09:24:22

smirnoffs
От:
Зарегистрирован: 2011-05-19
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Выловить регулярными выражениями слова написанные с большой буквы

Задача выловить регулярными выражениями слова, начинающиеся с больших букв, находящиеся не в начале предложения.
Например

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]?'
Как правильно написать выражение?



Офлайн

#2 Июль 8, 2011 12:03:45

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Выловить регулярными выражениями слова написанные с большой буквы

regexp="([A-Z]\w+)"
['Hi', 'Nick', 'How', 'Are', 'Kyiv']
oops, недосмотрел “не в начале предложения”
P.S. http://www.addedbytes.com/download/regular-expressions-cheat-sheet-v2/png/



Отредактировано (Июль 8, 2011 12:05:30)

Офлайн

#3 Июль 8, 2011 12:06:18

smirnoffs
От:
Зарегистрирован: 2011-05-19
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Выловить регулярными выражениями слова написанные с большой буквы

diam123
regexp="([A-Z]\w+)"
['Hi', 'Nick', 'How', 'Are', 'Kyiv']
oops, недосмотрел “не в начале предложения”
P.S. http://www.addedbytes.com/download/regular-expressions-cheat-sheet-v2/png/
Да, да, именно не в начале предложения.



Офлайн

#4 Июль 8, 2011 12:19:44

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Выловить регулярными выражениями слова написанные с большой буквы

smirnoffs
Да, да, именно не в начале предложения.
Если брать указанную вами строку, то:
regexp="[^\.\?\!] ([A-Z]\w+)"
Но это сильно накладывает ограничения, такие как:
Предложение должно заканчиваться на . или ? или !
Перед нужными словами обязательно должен стоять пробел…



Отредактировано (Июль 8, 2011 12:20:16)

Офлайн

#5 Июль 8, 2011 12:27:15

smirnoffs
От:
Зарегистрирован: 2011-05-19
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Выловить регулярными выражениями слова написанные с большой буквы

diam123
smirnoffs
Да, да, именно не в начале предложения.
Если брать указанную вами строку, то:
regexp="[^\.\?\!] ([A-Z]\w+)"
Но это сильно накладывает ограничения, такие как:
Предложение должно заканчиваться на . или ? или !
Перед нужными словами обязательно должен стоять пробел…
Пробел может стоять, а может и не стоять. А еще их может быть два. Как тогда?



Офлайн

#6 Июль 8, 2011 12:36:54

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Выловить регулярными выражениями слова написанные с большой буквы

smirnoffs
Пробел может стоять, а может и не стоять. А еще их может быть два. Как тогда?
Вы бы больше примеров дали, батенька :)
Есть вот такой вот вариант:
regexp = u"[^\.\?\!\$][\s|\S]([A-Z]\w+)"
Если у вас в словах не будет смешанных регистров букв (aMaya), то он подойдёт.
Пробуйте, и давайте еще образцов текстов, если не то :)



Офлайн

#7 Июль 8, 2011 13:47:29

smirnoffs
От:
Зарегистрирован: 2011-05-19
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Выловить регулярными выражениями слова написанные с большой буквы

Пример

re.findall(regexp, "We are going to visit Cambridge (California, US) next week.  Would you join?") = ['Cambridge','California','US']



Офлайн

#8 Июль 8, 2011 19:51:06

Nik
От:
Зарегистрирован: 2010-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Выловить регулярными выражениями слова написанные с большой буквы

>>> 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']



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version