正则表达式提取两个字符串(这是变量)

kyr*_*nia 7 python regex python-2.7

我希望使用正则表达式来提取两个字符串之间的文本.我知道怎么做如果我想每次都在相同的字符串之间提取(并且无数问题要求这个,例如两个字符串之间的正则表达式匹配?),但是我想使用变化的变量来做,并且可能本身包含特殊字符正则表达式.(我想要任何特殊字符,例如*被视为文本).

例如,如果我有:

text = "<b*>Test</b>"
left_identifier = "<b*>"
right_identifier = "</b>
Run Code Online (Sandbox Code Playgroud)

我想创建正则表达式代码,这将导致以下代码运行:

re.findall('<b\*>(.*)<\/b>',text)
Run Code Online (Sandbox Code Playgroud)

这是<b\*>(.*)<\/b>我不知道如何动态创建的部分.

Ale*_*ila 6

你可以这样做:

import re
pattern_string = re.escape(left_identifier) + "(.*?)" + re.escape(right_identifier)
pattern = re.compile(pattern_string)
Run Code Online (Sandbox Code Playgroud)

转义函数将自动转义特殊字符.例如:

>>> import re
>>> print re.escape("<b*>")
\<b\*\>
Run Code Online (Sandbox Code Playgroud)


agf*_*agf 5

您需要re.escape标识符:

>>> regex = re.compile('{}(.*){}'.format(re.escape('<b*>'), re.escape('</b>')))
>>> regex.findall('<b*>Text</b>')
['Text']
Run Code Online (Sandbox Code Playgroud)