我试图找到符号“在一个大文本中,当它紧接着前面和后面只有一个单词或字符。然后我想用这个符号替换它而不改变它之前和之后的单词/数字:”
我试过这个:
text7 = re.sub(r'(\w)"(\w)', r"$1\'$2", text6)
对于“它”这个词,“我现在得到的只是1美元2美元。我想要的是”这是“任何建议?
使用lookbehind和lookahead;这些只是看起来没有被替换文本修改:
text7 = re.sub(r'(?<=\w)"(?=\w)', "'", text6)
有关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
。此外,您在替换字符串中的单引号前面还有一个额外的\
。
你可以使用\b"\b
替换'
。 \b
是一个单词边界,匹配以下匹配的任何地方(不消耗字符):^\w|\w$|\W\w|\w\W
。
import re
print(re.sub(r'\b"\b', "'", 'it"s'))
附:在python中,\1
或\g<1>
用于引用捕获组,而不是$1
,因为它将在字面上进行解释。有关更多信息,请参阅python的re.sub()
文档。