2013-09-28 2 views
1

Я пытаюсь соответствовать различные выражения для адресов:питон Regex матч точное слово

Пример: '398 W. Broadway'

Я хотел бы, чтобы соответствовать W. или E. (восток) или Pl. за место ... и т.д.

Это очень просто, используя это регулярное выражение

(W.|West), например.

Но питон повторно модуль ничего не соответствует, когда вход, что

>>> a 
'398 W. Broadway' 
>>> x = re.match('(W.|West)', a) 
>>> x 
>>> x == None 
True 
>>> 
+0

'.' имеет особое значение в регулярных выражениях. –

+1

Отключить тему, но 'x == None' не даст того, что вы ожидаете во всех ситуациях, потому что' False == None' является 'True', как' 0 == None', '[] == None' и '' '== None'. Чтобы проверить, что что-то есть 'Нет', а не только' False', используйте 'x is None'. – SethMMorton

+0

спасибо за это. Да, я никогда не делаю '== None' в коде, это всего лишь оболочка. –

ответ

8

re.match матчи в начале входной строки.

В любом случае используйте re.search.

>>> import re 
>>> re.match('a', 'abc') 
<_sre.SRE_Match object at 0x0000000001E18578> 
>>> re.match('a', 'bac') 
>>> re.search('a', 'bac') 
<_sre.SRE_Match object at 0x0000000002654370> 

См search() vs. match():

Python предлагает два различных примитивных операций на основе регулярных выражений : re.match() проверяет на совпадение только в начале строки, в то время как re.search() проверяет соответствие в любом месте строки (это то, что по умолчанию делает Perl).

+0

Что делать, если я хочу его заменить? Я пробовал использовать sub(), но он не работал –

+0

@Saher, как вы использовали 'sub'? Вы должны использовать как 're.sub (old_pattern, replacement_string_or_function, target_string)'. См. Документацию '' re.sub' '(http://docs.python.org/2/library/re.html#re.sub). – falsetru

+0

неважно. Для этого потребовался escape '\ .'. –

3

.match() сдерживает поиск, начинающийся с первого символа строки. Вместо этого используйте .search(). Также обратите внимание, что . соответствует любому символу (кроме символа новой строки). Если вы хотите соответствовать буквальному периоду, сбегите от него (\. вместо простого .).

-1
withWithout = raw_input("Enter with or without: \n") 
if re.match('with|without', withWithout): 
    print "You enterd :", withWithout, "So I will DO!", withWithout 
elif not re.match('with|without', withWithout): 
    print " Error! you can only enter with or without ! "  
sys.exit() 
Смежные вопросы