2015-01-08 3 views
0
import re 
look = r'Template.11_31.Single-Volume' 
pattern = r'11.31' 

match = re.search(pattern,look) 

print re.findall(pattern,look) 

if (match is not None): 
    print match.group(0) 

Ответ:Почему python соответствует неправильному шаблону?

['11_31'] 
11_31 

Я хочу, чтобы соответствовать 11.31 или 1131, но здесь также соответствует 11_31

+0

может быть, я не отвечаю на ваш вопрос, но вам понравится этот синтаксис сахара: печать «» .join (match.group (0), если матч не является никто другой «») – liuzhidong

ответ

5

Проблемы в своем регулярном выражении 11.31 точки будет матча любого символа.

Вы можете использовать это регулярное выражение:

pattern = r'11\.?31' 

Это матч 11.31 или 1131 но не 11_31 или 11:31 так \. буквальную точку и \.? марки усеивает дополнительный матч.

Пример:

>>> print re.findall(pattern, "Template.11.31.Single-Volume-1131-something") 
['11.31', '1131'] 
+1

поблагодарить у так много –

+0

Рад узнать, что это сработало, [вы можете отметить ответ как принятый, щелкнув на отметке ** отметки ** в левом верхнем углу этого ответа] (http://meta.stackexchange.com/a/5235/160242) – anubhava

3
pattern =r'11.31' 

Здесь . может соответствовать что-нибудь, так что будет соответствовать _ в 11_31, а также. Либо отпустите его (\.), либо поместите его в класс символов ([.]) и добавьте его к нему, как требуется.

Используйте этот

pattern =r'11[.]?31' 

См демо.

https://regex101.com/r/sH8aR8/21

+0

благодарю вас столько –