Python字符串变量本身在Regex模式中

时间:2014-05-21 05:05:09

标签: python regex string

是否可以在Regex模式中包含字符串变量?

text="Sample text is"
st="text"
r=re.findall("[A-Z]+[st]+",text)
print(r[:])

Resaon是我在循环中需要正则表达式模式,因此st字符串变量将不会被修复并且将会发生变化,所以我不能将正则表达式模式写为“text”。还是不可能?谢谢!

4 个答案:

答案 0 :(得分:1)

您可以像这样构建正则表达式

pattern = re.compile(r"[A-Z]+({})+".format(st))
re.findall(pattern, text)

您可以检查创建的模式,例如

print pattern.pattern

在上面的表达式中,st中的值将替换为{}。您可以阅读更多相关信息here

请注意,我已将[st]更改为(st),因为[st]将匹配单词st中的任何字符。如果你想匹配实际的单词,那么你可能想要像我展示的那样对它进行分组。

但是,如果您要做的只是检查另一个字符串是否存在,那么您可以使用in运算符,就像这样

if st in text:

答案 1 :(得分:1)

Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
>>> import re
>>> text = "Sample text is"
>>> st = "text"
>>> r = re.findall(r"[A-Z]+[%s]+" % re.escape(st), text)
>>> print(r[:])
[]

请注意,我正在逃避文字。

答案 2 :(得分:0)

你为什么不这样做:

>>> text="Sample text is"
>>> st="text"
>>> if st in text:
...     print('Success')

答案 3 :(得分:0)

只需连接正则表达式字符串。

import re
pattern1 = "[A-Z]"
pattern2 = "text"
pattern = pattern1 + pattern2

text = "Sample Atext is Ztext"
r = re.findall(pattern, text)
print(r[:])
#['Atext', 'Ztext']