如何在python中将变量用作正则表达式?

时间:2019-01-23 16:39:00

标签: python regex

我使用Sub Test() Dim PathName As String Dim usFileName As String PathName = "Your path" usFileName = PathName & "\" & "Prices.txt" Workbooks.OpenText Filename:=usFileName, _ StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), _ Array(19, 1), Array(32, 1), Array(48, 1), Array(55, 1)) End Sub 在文件上查找单词,并将其存储为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)

1 个答案:

答案 0 :(得分:3)

仅在定义带有很多反斜杠的字符串时才需要r前缀,因为正则表达式和Python字符串语法都将含义附加到反斜杠。 r'..'只是一种替代语法,它使使用正则表达式模式变得更容易。您没有使用r'..'原始字符串文字。有关更多信息,请参见Python regex howto中的The backslash plague

所有这些都意味着,当您已经有一个字符串值时,您当然不需要使用r前缀。正则表达式模式是只是一个字符串值,您可以使用常规的字符串格式或连接技术:

pnt_grp = re.match(lattice_type + '(.*?) .*', line, re.M|re.I)

我没有在上面的字符串文字中使用r,因为表达式中没有\的反斜杠会引起问题。

如果 值可能包含正则表达式元字符(例如{{1}),则可能需要在lattice_type值上使用re.escape() function }或.?等。[转义了此类元字符,以便仅匹配文字

re.escape()