2013-09-26 3 views
2

У меня есть это регулярное выражение рисунка наPython регулярное выражение имени группы начинается с

r'^(?P<my_group>[-\w]+)' 

это соответствует

foo-bar и bar-foo

Но я хочу, чтобы соответствовать только строки, которые начинаются с «Ф.О.» как Я делаю это для названных групп?

Я попытался

r'^(?P<my_group>[[^fo]-\w]+)' 

ответ

4

Вы не ставите его в квадратные скобки (классы символов), но за их пределами:

r'^(?P<my_group>fo[-\w]+)' 

Ваше текущее регулярное выражение соответствие один из символов в [[^fo] (т.е. [^fo), за которым следует тире, символ слова и один или несколько ].

Вы можете проверить свое регулярное выражение на this website.

2

Вы должны использовать fo[\w-]+ вместо [[^fo]-\w]+. Вы сделали небольшой беспорядок со своим классом персонажа. В квадратных скобках вы должны поместить символ, который хотите совместить (также как интервалы, например [a-z]). Если вы хотите, чтобы соответствовать -, это хорошая практика, чтобы положить его в конце в классе символов, чтобы избежать путаницы с интервалами (так что вы должны написать что-то вроде [a-d-], чтобы соответствовать a, b, c, d и -). Если в классе символов вы положили ^ в самом начале, вы хотите, чтобы соответствовать всем символам, которые не перечислены, так [^a-d-] будет соответствовать все, кроме a, b, c, d и -. Обратите внимание, что вне класса символов ^ означает начало строки.

Смежные вопросы