2014-01-16 3 views
0
string = "RegisterParameter uri wub {" 
RegisterName = re.findall("RegisterParameter uri ([^ ]*) {",string) 

print 'RegisterName is :',RegisterName 

См. Приведенный выше код. Здесь я хочу найти имя регистра в строке i.e wub по регулярному выражению. Я написал RE для этого. Если вы запустите этот код, он даст результат, как ['wub'], но я хочу, чтобы wub не был скобкой или цитатой. Итак, какие изменения нужно сделать здесь.Python: RE выпуск с "re.findall()"

Большое спасибо за помощь.

ответ

2

Вы можете использовать re.search() (или re.match() - зависит от ваших потребностей) и получить захваченную группу:

>>> import re 
>>> s = "RegisterParameter uri wub {" 
>>> match = re.search("RegisterParameter uri ([^ ]*) {", s) 
>>> match.group(1) if match else "Nothing found" 
'wub' 

Кроме того, вместо [^ ]*, вы можете использовать \w*. \w соответствует любому символу слова.

Смотрите также:

+0

Это Виль возбудит исключение, когда 're.search' не найдет ничего – Elisha

+0

@Elisha, да, хорошая точка, спасибо. – alecxe

+0

Я думаю, что строка с 're.search' возвращает' None', а не '' wub'' – Elisha

3

RegisterName является list только с одним str элементом. Если проблема просто печать вы можете попробовать:

print 'RegisterName is :', RegisterName[0] 

Выход:

RegisterName is : wub 

PS:

  • Когда вы не уверены в типе переменную попробуйте ее распечатать:

    print type(RegisterName) 
    
  • Я бы порекомендовал вам использовать Python conventions идентификаторы с именами, как SomeName часто используются в качестве имен классов. Для переменных, можно использовать some_name или register_name

+0

Строго говоря, не представляется правильным использовать 'find_all()' для поиска только одного первого совпадения. Подумайте об этом: например, вы получите все свои данные из таблицы, чтобы получить только одну первую строку? .. хотя это заставляет все работать здесь, да. – alecxe

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