Python 在正则表达式中允许转义序列
我正在尝试创建一个正则表达式来查找$VAR或${VAR}的出现。如果给定了\$VAR或\${VAR}之类的内容,则它将不匹配。如果给它类似\\$VAR或\\${VAR}或2的任意倍数,它应该匹配Python 在正则表达式中允许转义序列,python,regex,Python,Regex,我正在尝试创建一个正则表达式来查找$VAR或${VAR}的出现。如果给定了\$VAR或\${VAR}之类的内容,则它将不匹配。如果给它类似\\$VAR或\\${VAR}或2的任意倍数,它应该匹配 i.e. $BLOB matches \$BLOB doesn't match \\$BLOB matches \\\$BLOB doesn't match \\\\$BLOB matches ... etc 我目前正在使用以下正则表达式: line = re.sub("[^\\][\\\\]
i.e.
$BLOB matches
\$BLOB doesn't match
\\$BLOB matches
\\\$BLOB doesn't match
\\\\$BLOB matches
... etc
我目前正在使用以下正则表达式:
line = re.sub("[^\\][\\\\]*\$(\w[^-]+)|"
"[^\\][\\\\]*\$\{(\w[^-]+)\}",replace,line)
然而,这并不能正常工作。当我给它\$BLOB时,由于某种原因它仍然匹配。这是为什么?第二组双斜杠被编写为冗余字符类
[\\\\]*
,匹配一个或多个反斜杠,但应该是一个重复组((?:\\\\\)*)
匹配一组或多组两个反斜杠:
re.sub(r'(?<!\\)((?:\\\\)*)\$(\w[^-]+|\{(\w[^-]+)\})',r'\1' + replace, line)
re.sub(r'(?编写一个正则表达式,该正则表达式将查找$
,除非它使用E
进行转义,除非它反过来也被转义EE:
import re
values = dict(BLOB='some value')
def repl(m):
return m.group('before') + values[m.group('name').strip('{}')]
regex = r"(?<!E)(?P<before>(?:EE)*)\$(?P<name>N|\{N\})"
regex = regex.replace('E', re.escape('\\'))
regex = regex.replace('N', r'\w+') # name
line = re.sub(regex, repl, line)
重新导入
values=dict(BLOB='some value')
def repl(m):
返回m.group('before')+值[m.group('name').strip('{}')]
regex=r“(?(?:EE)*)\$(?PN{N\})”
regex=regex.replace('E',re.escape('\\'))
regex=regex.replace('N',r'\w+')#名称
line=re.sub(regex,repl,line)
使用E
而不是\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
公开嵌入的语言,而不考虑Python字符串文本和正则表达式模式中的反斜杠。r'\1'做了什么?@Apollo ther'\1'
是第一组。在这种情况下,它会将许多反斜杠放在替换之前也就是说,如果line
是\\$BLOB
而replace
是x
,那么line
将变成\\x
,而不仅仅是x
。