2015-04-27 5 views
0

Я пытаюсь проверить, содержит ли моя строка какое-то регулярное выражение.Python Regex: "re.match()" работает иначе, чем "re.sub()" для regex

Странная вещь в том, что в то время как re.sub() найдет регулярное выражение и заменить его, re.match() не возвращает никаких результатов ...

Вот мое использование:

re.match(): - не пытается соответствовать шаблону ,\s*param2 - ничего возвращается

>>> str = 'func(param1, param2)' 
>>> str 
'func(param1, param2)' 
>>> results = re.match(r',\s*param2', str) 
>>> print(results) 
None 

re.sub(): - Успешно повторно размещая ту же картину ,\s*param2 на «привет»

>>> str = 'func(param1, param2)' 
>>> str 
'func(param1, param2)' 
>>> new_str = re.sub(r',\s*param2', ' hello', str) 
>>> new_str 
'func(param1 hello)' 

Как я могу соответствовать шаблону ,\s*param2 без подставив его?

+3

're.match' соответствует началу строки. Вы пробовали 're.search'? –

+0

Является ли 're.search' таким же, как' re.match', за исключением «начала»? – SomethingSomething

+0

Работает! Спасибо! I – SomethingSomething

ответ

4

Обратите внимание, что re.match соответствует началу строки. Возможно, вы ищете re.search. См. search vs. match для некоторых деталей.

>>> str = 'func(param1, param2)' 
>>> re.match(r',\s*param2', str) 
>>> re.search(r',\s*param2', str) 
<_sre.SRE_Match object at 0x7f16b72b83d8> 
+0

Это именно то, что мне нужно! Спасибо! – SomethingSomething

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