2015-06-02 4 views
1

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

str1 = "{#decode(en.flower)}" 
str2 = "{#en.flower}" 

Я хочу, чтобы захватить оба этих типов строк регулярным выражением, но я не могу захватить str1 строку. Захват строки str2 не представляет проблемы.

Мой Регулярное выражение

r'\{\#([a-zA-Z]\()?(en|kr)\.[a-zA-Z0-9_]+[\)]?\}' 

Почему я не могу захватить str строку?

+0

Не используйте выражение str = x, поскольку оно перезапишет встроенную функцию 'str'. –

ответ

2

VKS помог вам разобрался с проблемой.

Этот ответ может помочь вам улучшить ваш шаблон регулярного выражения для пропуска захвата недопустимых строк, таких как:

str1 = "{#decode(en.flower}" 
str2 = "{#en.flower)}" 

В этом случае вы можете использовать yes-pattern|no-pattern питон регулярного выражения:

>>> p1 = r'\{\#([a-zA-Z]+\()?(en|kr)\.[a-zA-Z0-9_]+[\)]?\}' # your original pattern 
>>> re.match(p1, str1).groups() 
('decode(', 'en') 
>>> re.match(p1, str2).groups() 
(None, 'en') 
>>> p2 = r'\{\#([a-zA-Z]+\()?(en|kr)\.[a-zA-Z0-9_]+(?(1)\))\}' 
>>> print re.match(p2, str1) 
None 
>>> print re.match(p2, str2) 
None 

p2 будет захватывать только когда encode( и ) есть в паре.

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