2016-05-12 5 views
0

В коде ниже питонаPython поиск регулярного выражения имеет нежелательные символы

import re 

myText = "The color of the car is red. Which is a popular color." 
regularExp = "The color of the car is\s*(?P<color>\w*)..*" 
pattern = re.compile(regularExp) 

match = re.search(pattern, myText) 
color = match.groups("color") 
print(color) 

Я ожидаю, что выход будет red. Но я получаю ('red',). Что я делаю не так?

+2

Вы использовали 'groups()', используйте 'group (" color ")'. –

ответ

1

Вы печатаете кортеж, а не str. Попробуйте это:

print(color[0]) 

или (Кредит: Wiktor Stribiżew):

color = match.group("color") 
print(color) 
3

re.search возвращает match object, как вы можете видеть, что метод groups всегда возвращает кортеж. Следовательно, либо получить доступ к первому элементу результата color[0] или использовать функцию group вместо:

color = match.group("color") 

Также отметим, что match.groups("color") это, вероятно, не делать то, что вы думаете, что делает, процитировать документации:

матч .groups (default = None)

Аргумент по умолчанию используется для групп, которые не участвовали в матче ; по умолчанию используется значение None.

Значение означает, что цвет будет «цветным», если для вашей группы цветов не найдено соответствия.

0

для объекта сопряжения m, m.groups возвращает tuple, неизменяемую последовательность. Вы можете индексироваться или

color = m.group(1) # m.group(n) for nth group 

ИЛИ

color = m.group('color') # for named group 

Вы сказали ('red',) к содержали нежелательных символов. Вероятно, это означает, что вам нужно очистить базовый питон, поскольку вы не можете распознать tuple.

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