是否可以在Regex模式中包含字符串变量?
text="Sample text is"
st="text"
r=re.findall("[A-Z]+[st]+",text)
print(r[:])
Resaon是我在循环中需要正则表达式模式,因此st字符串变量将不会被修复并且将会发生变化,所以我不能将正则表达式模式写为“text”。还是不可能?谢谢!
答案 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']