2013-04-22 2 views
0

Мне нужно создать регулярное выражение, которое находит следующую закономерность:Regex: только соответствие, если символ встречается 1 раз

= Head: Some text = 

Я попытался это:

^(?:[=]).*(?:[=]) 

Но это также соответствует этому (что это не должны совпадать):

== Hello Text 2 == 

Так как я могу сказать, регулярное выражение не соответствует многократным возникновения ==

спасибо за ваш ответ.

ответ

2

Вы можете использовать отрицание класса символов вместо .

^=[^=]*=$ 

[^=]* является соответствие любого символа, а "="

$ сопрягает конец строки

Смотреть это here on Regexr

+0

Зачем использовать '(?: [=])' Вместо просто '='? –

+0

Стилистический выбор, или для удобства чтения – jamylak

+0

@ A.Rodas, вы правы, просто скопируйте пасту из OP. – stema

2

Следующие могут быть легко читаемыми:

>>> s = '= Head: Some text =' 
>>> t = '== Hello Text 2 ==' 
>>> re.match(r'=[ ](.*?)[ ]=', s).group(1) 
'Head: Some text' 
>>> re.match(r'=[ ](.*?)[ ]=', t).group(1) 
Traceback (most recent call last): 
    File "<pyshell#22>", line 1, in <module> 
    re.match(r'=[ ](.*?)[ ]=', t).group(1) 
AttributeError: 'NoneType' object has no attribute 'group' 
+0

Хорошо, но ваше регулярное выражение также совпадает, если строка '== Hello =='. Проверьте здесь http://regexr.com?34k8a – Pascal

+0

@HotPizzaBox не использует 're.match', это не ... (ссылка, которую вы дали, кажется, требует явного'^'в начале шаблона) –

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