python中的regex sub - 将字符分组以识别3个字符并仅更改其中一个字符

时间:2018-02-28 16:50:13

标签: python regex

我试图找到符号"在一个大文本中,它只是紧跟在一个单词或字符之后。然后我想用这个符号替换它而不改变它之前和之后的单词/数字:'

我试过了:

text7 = re.sub(r'(\w)"(\w)', r"$1\'$2", text6)

对于"它" s"我现在得到的只是1美元和2美元。我想要的是"它"" 有什么建议吗?

3 个答案:

答案 0 :(得分:1)

使用lookbehind和lookahead;这些只是看起来没有被替换文本修改:

text7 = re.sub(r'(?<=\w)"(?=\w)', "'", text6)

答案 1 :(得分:0)

您可以使用\b"\b替换为'\b是一个字边界,可以匹配以下匹配的任何位置(不消耗字符):^\w|\w$|\W\w|\w\W

See code in use here

import re
print(re.sub(r'\b"\b', "'", 'it"s'))

P.S。在python中\1\g<1>用于引用捕获组,而不是$1,因为它将按字面解释。有关详细信息,请参阅python的re.sub()文档。

答案 2 :(得分:0)

有关re模块的帮助,建议您在解释器中运行help(re)(或从命令行运行pydoc re)。它的布局非常方便,我发现它比在线文档更容易理解。

解决方案:

>>> import re
>>> text6 = 'it"s'
>>> print(re.sub(r'(\w)"(\w)', r"\1'\2", text6))
it's

您使用$1来匹配第1组,但在Python中\1。此外,您在替换字符串中的单引号前面还有一个\