如何在 python 中使用变量作为正则表达式? [复制]
Posted
技术标签:
【中文标题】如何在 python 中使用变量作为正则表达式? [复制]【英文标题】:How can I use a variable as regex in python? [duplicate] 【发布时间】:2019-06-17 07:32:41 【问题描述】:我使用re
在文件中查找单词并将其存储为lattice_type
现在我想使用存储在lattice_type
上的单词来制作另一个正则表达式
我试过用这种方式使用变量名
pnt_grp=re.match(r'+ lattice_type + (.*?) .*',line, re.M|re.I)
在这里我查找正则表达式lattice_type=
并将group(1)
存储在lattice_type
中
latt=open(cell_file,"r")
for types in latt:
line = types
latt_type = re.match(r'lattice_type = (.*)', line, re.M|re.I)
if latt_type:
lattice_type=latt_type.group(1)
这是我想使用包含单词的变量在另一个文件中找到它的地方,但我遇到了问题
pg=open(parameters,"r")
for lines in pg:
line=lines
pnt_grp=re.match(r'+ lattice_type + (.*?) .*',line, re.M|re.I)
if pnt_grp:
print(pnt_grp(1))
【问题讨论】:
【参考方案1】:r
前缀仅在定义带有大量反斜杠的字符串时才需要,因为正则表达式和 Python 字符串语法都将含义附加到反斜杠。 r'..'
只是一种替代语法,它更容易 使用正则表达式模式。您没有有使用r'..'
原始字符串文字。有关更多信息,请参阅 Python regex howto 中的The backslash plague。
所有这意味着当您已经有一个字符串值时,您当然不需要使用r
前缀。正则表达式模式只是一个字符串值,您可以使用普通的字符串格式或连接技术:
pnt_grp = re.match(lattice_type + '(.*?) .*', line, re.M|re.I)
我没有在上面的字符串文字中使用r
,因为那里的表达式中没有\
反斜杠会导致问题。
您可能需要在您的lattice_type
值上使用re.escape()
function,如果该值可能包含正则表达式元字符,例如.
或?
或[
等 re.escape()
对此类元字符进行转义,以便仅匹配 文字:
pnt_grp = re.match(re.escape(lattice_type) + '(.*?) .*', line, re.M|re.I)
【讨论】:
我进行了更改,但我得到了这个:在 '_sre.SRE_Match' 对象不可调用,因为 lattice_type 是稍后搜索的匹配项。我该如何解决? @JorgeCastro:如果lattice_type
是匹配对象,则使用match object method 获取字符串。如lattice_type.group()
。以上是关于如何在 python 中使用变量作为正则表达式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
python中的正则表达式:如何在模式中使用变量字符串? [复制]