Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python regex match&;替换原始字符串_Python_Regex - Fatal编程技术网

Python regex match&;替换原始字符串

Python regex match&;替换原始字符串,python,regex,Python,Regex,我不明白为什么要遵循re.sub的行为。任何人都可以解释如何在re.sub中处理字符串?为什么语句2不匹配并替换?谢谢 1. >>> re.sub(r'\$abc', 'ABC', r'\$abcdefg') '\\ABCdefg' 2. >>> re.sub(r'\\$abc', 'ABC', r'\\$abcdefg') '\\\\$abcdefg' 3. >>> r'\\$abc' in r'\\$abcdefg' True 4.

我不明白为什么要遵循re.sub的行为。任何人都可以解释如何在re.sub中处理字符串?为什么语句2不匹配并替换?谢谢

1. >>> re.sub(r'\$abc', 'ABC', r'\$abcdefg')
'\\ABCdefg'

2. >>> re.sub(r'\\$abc', 'ABC', r'\\$abcdefg')
'\\\\$abcdefg'

3. >>> r'\\$abc' in r'\\$abcdefg'
True

4. >>> re.sub(r'\\\$abc', 'ABC', r'\\\$abcdefg')
'\\\\ABCdefg'

这是因为在模式(第一个参数)中,双反斜杠
\\
变成了一个斜杠,因此不匹配

发生这种情况的原因是,当正则表达式引擎看到一个斜杠时,它会自动转义下一个字符,从而在一个文本中产生
\

要使正则表达式与两个斜杠匹配,应再添加两个斜杠:

2. >>> re.sub(r'\\\\\$abc', 'ABC', r'\\\$abcdefg')
'\ABCdefg'
参考:


希望能有所帮助。

好吧,你的第二句话正在呈现
\\\\ABCdefg
。你期望的结果是什么看起来stackoverlow在我的帖子中弄乱了退格。现在我修改了它。对于报表2,我不确定为什么不进行替换。语句1/2/4之间的正则表达式处理有什么不同?谢谢您的帮助。请看我修改后的帖子和评论。即使正则表达式使用反斜杠,它也应该与第三个参数匹配,对吗?@abemaw。您似乎删除了保留的
$
的转义字符(这意味着匹配应该发生在字符串的末尾)。这是有意的吗?不管怎么说,我认为问题在于你应该避开所有的斜杠和
$
,没有特别的意图。我只是不明白Python的解释器和正则表达式引擎是如何处理“\”的,因此语句2不匹配并替换。@abemaw。从简单到困难:1<代码>'$abc'将不匹配任何内容,因为
$
是一个正则表达式保留键,表示
字符串的结尾。然后,为了匹配文本
$abc
,您应该通过
“\$abc”
的方式进行转义。直到现在。。。嗯,如果您想匹配字符串中的文本
\
,您也必须对其进行转义(因为它也是由正则表达式引擎保留的)。然后,
“\\\$abc”
匹配文本
\$abc
,等等……在讨论之前,我想我有两件事弄糊涂了:1。R/R前缀将由python解释程序保留反斜杠,但这些反斜杠将在正则表达式引擎中解释为转义字符。2. '$' 正则表达式引擎还将其解释为字符串的结尾。这解释了为什么语句2不匹配。非常感谢,@washington guedes