Ped*_*ito 201 python regex variables escaping python-3.x
我想在variable里面用一个regex,我怎么能这样做Python呢?
TEXTO = sys.argv[1]
if re.search(r"\b(?=\w)TEXTO\b(?!\w)", subject, re.IGNORECASE):
# Successful match
else:
# Match attempt failed
Run Code Online (Sandbox Code Playgroud)
Ned*_*der 263
您必须将正则表达式构建为字符串:
TEXTO = sys.argv[1]
my_regex = r"\b(?=\w)" + re.escape(TEXTO) + r"\b(?!\w)"
if re.search(my_regex, subject, re.IGNORECASE):
etc.
Run Code Online (Sandbox Code Playgroud)
请注意使用,re.escape以便如果您的文本具有特殊字符,则不会将其解释为此类字符.
小智 42
if re.search(r"\b(?<=\w)%s\b(?!\w)" % TEXTO, subject, re.IGNORECASE):
Run Code Online (Sandbox Code Playgroud)
这将把TEXTO中的内容作为字符串插入到正则表达式中.
Cat*_*lus 33
rx = r'\b(?<=\w){0}\b(?!\w)'.format(TEXTO)
Run Code Online (Sandbox Code Playgroud)
从python 3.6开始,您还可以使用文字字符串插值(“ f-strings”)。在您的特定情况下,解决方案是:
if re.search(rf"\b(?=\w){TEXTO}\b(?!\w)", subject, re.IGNORECASE):
...do something
Run Code Online (Sandbox Code Playgroud)
我同意以上所有内容,除非:
sys.argv[1] 就像 Chicken\d{2}-\d{2}An\s*important\s*anchor
sys.argv[1] = "Chicken\d{2}-\d{2}An\s*important\s*anchor"
Run Code Online (Sandbox Code Playgroud)
您不想使用re.escape,因为在这种情况下,您希望它表现得像一个正则表达式
TEXTO = sys.argv[1]
if re.search(r"\b(?<=\w)" + TEXTO + "\b(?!\w)", subject, re.IGNORECASE):
# Successful match
else:
# Match attempt failed
Run Code Online (Sandbox Code Playgroud)
小智 5
我发现通过将多个较小的模式串在一起来构建正则表达式模式非常方便。
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)
Run Code Online (Sandbox Code Playgroud)
输出:
[('begin', 'id1'), ('middl', 'id2')]
Run Code Online (Sandbox Code Playgroud)