2015-03-14 3 views
0

Я хотел бы создать регулярное выражение, используя re module. Но неясно, как создать шаблон аналогичным образом создания отформатированной строки, например .: Мне нужно что-то вродеСоздать параметризованный шаблон регулярного выражения Python

myPattern = r'\s*{linehead}'.format(someText) 

Возможно ли это?

Когда я использую

if myPattern.search(l) is not None:,

Я получаю

AttributeError: 'str' object has no attribute 'search'

+1

Да, но вы должны использовать ключевое слово аргумент для этой модели: 'myPattern = г» \ s * {linehead} '. format (linehead = "someText") ' – Brionius

+0

Когда я использую' if myPattern.search (l) не None: ', я получаю ' AttributeError: объект' str 'не имеет атрибута 'search'' – kakyo

+2

или 'myPattern = re.compile (r' \ s * {linehead} '. format (linehead =" someText ");' myPattern.search (l) не является None' – IceArdor

ответ

1

Как было упомянуто в комментариях, myPattern это просто строка. «R» просто говорит Python, что это «сырая» строка и не должен пытаться интерпретировать экранированный текст.

После того, как у вас есть регулярное выражение отформатирован так, как вам нравится (обратите внимание, так как вы назвали параметр «linhead», вам необходимо определить его аргументов format:

myPattern = r'\s*{linehead}'.format(linehead="someText") 

Вам нужно чтобы сделать объект регулярного выражения с re.compile()

myRegex = re.compile(myPattern) 

вы можете теперь использовать myRegex как вы первоначально предполагалось:.

if myRegex.search(l) is not None: 
    ... 

Или, вы можете сделать все это на одном дыхании, как @IceArdor предложил:

myPattern = re.compile(r'\s*{linehead}'.format(linehead="someText"); 

См https://docs.python.org/2/library/re.html#module-re

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