2015-04-16 2 views
1

У меня возникают проблемы при попытке получить некоторые данные из круглых скобок. Вот некоторые примеры кода:Регулярные выражения Python внутри скобок

import re  
test_string = '123a (456b)' 
regex_a = re.match(r'(?P<a>\d+)a', test_string) 
regex_b = re.match(r'(?P<b>\d+)b', test_string) 
print regex_a 
print regex_b 

я ожидал бы два регулярных выражений объекты, чтобы вернуться с 123 и 456 соответственно, но regex_b возвращает None. Вот скрипка python, показывающая это (не): http://pythonfiddle.com/regex-in-parenthesis

Я также пробовал это в Pythex тоже (here's a link), но в этой среде он работает!

Я почесываю голову о том, что происходит, любая помощь, которую вы могли бы мне дать, была бы весьма признательна. Я использую python 2.6, если это имеет значение.

+1

Попробуйте заменить '(' 'с \ (и') 'с' \) '. – dizballanze

+3

'match' начинается в начале строки. Вместо этого используйте 'search'. См. [Документация] (https://docs.python.org/2/library/re.html) и десятки, если не сотни других вопросов на этом сайте. – BrenBarn

+0

Полагаю, что это было в документации, но когда я использовал .match() в прошлом и не сталкивался с этим, мне небезразлично подвергать сомнению регулярное выражение, которое я написал, а не функцию, которую я использовал. Тем не менее, каждый день школьный день, и это не ошибка, я буду делать снова. – Sok

ответ

2

re.match() только совпадения от начала строки. Вместо этого попробуйте re.search().

+0

Ого, горя, это так очевидно! Большое спасибо: o) – Sok

1

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

\((\d+).*\) 

Примечание, что вам нужно, чтобы избежать круглые скобки и использовать захват группируя для значного комбинации (\d+), а также Примечание что re.matchchecks for a match only at the beginning of the string, вместо этого вам нужно использовать re.search:

>>> re.search(r'\((\d+).*\)',test_string).group(1) 
'456' 

И если вы хотите, чтобы найти все номера вы можете использовать re.findall:

>>> re.findall(r'\d+',test_string) 
['123', '456'] 
+0

Создатель не хочет скрывать скобки, но использует их для создания групп для последующего извлечения значений. – syntonym

+0

@syntonym Спасибо за объяснение;), это был просто ответ! – Kasramvd

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