我想在正则表达式中使用一个变量,我如何在Python中做到这一点?

TEXTO = sys.argv[1]

if re.search(r"\b(?=\w)TEXTO\b(?!\w)", subject, re.IGNORECASE):
    # Successful match
else:
    # Match attempt failed

当前回答

下面是你可以使用的另一种格式(在python 3.7上测试)

regex_str = r'\b(?< \ \w)%s\b(

我发现当你不能使用{}变量(这里替换为%s)时,它很有用。

其他回答

我发现通过将多个较小的模式串在一起来构建正则表达式模式非常方便。

import re

string = "begin:id1:tag:middl:id2:tag:id3:end"
re_str1 = r'(?<=(\S{5})):'
re_str2 = r'(id\d+):(?=tag:)'
re_pattern = re.compile(re_str1 + re_str2)
match = re_pattern.findall(string)
print(match)

输出:

[('begin', 'id1'), ('middl', 'id2')]
if re.search(r"\b(?<=\w)%s\b(?!\w)" % TEXTO, subject, re.IGNORECASE):

这将把TEXTO中的内容作为字符串插入到正则表达式中。

更多的例子

我有config。yml 使用流文件

"pattern":
  - _(\d{14})_
"datetime_string":
  - "%m%d%Y%H%M%f"

我使用的python代码

data_time_real_file=re.findall(r""+flows[flow]["pattern"][0]+"", latest_file)

你必须以字符串的形式构建正则表达式:

TEXTO = sys.argv[1]
my_regex = r"\b(?=\w)" + re.escape(TEXTO) + r"\b(?!\w)"

if re.search(my_regex, subject, re.IGNORECASE):
    etc.

注意re.escape的使用,这样如果你的文本有特殊字符,它们就不会被这样解释。

我需要搜索彼此相似的用户名,Ned Batchelder说的非常有用。然而,当我使用re.compile创建我的re搜索项时,我发现我有更清晰的输出:

pattern = re.compile(r"("+username+".*):(.*?):(.*?):(.*?):(.*)"
matches = re.findall(pattern, lines)

输出可以使用以下命令打印:

print(matches[1]) # prints one whole matching line (in this case, the first line)
print(matches[1][3]) # prints the fourth character group (established with the parentheses in the regex statement) of the first line.