我想在字符串中用"?"
替换字符"fi"
。
我可以为此编写一个通用的str替换。但我想取代“?”只有它出现在两个A-Za-z字符之间并且避免其余的
例如,"Okay?"
应该是"Okay?
“而不是"Okayfi"
但
Modi?es应该修改,因为它有吗?在中间
我尝试了什么?
sentence = re.sub(r"(\?)\b", "fi", sentence)
请看这里。 https://regexr.com/3nvk3
似乎在regexr中工作正常。但在代码中不能很好地工作。我做错了吗?
答案 0 :(得分:1)
此处最好的方法是使用fi
ligature查找原始文本,并使用正确的编码将其读入。
否则,您将不得不使用一些解决方法。
您可以使用(?<=[a-zA-Z])
/ (?=[A-Za-z])
外观:
sentence = re.sub(r"(?<=[a-zA-Z])\?(?=[a-zA-Z])", "fi", sentence)
请参阅regex demo。 (?<=[a-zA-Z])
正向后看与ASCII字母后面的位置匹配,(?!=[A-Za-z])
正向前瞻与ASCII字母前面的位置匹配。
或者,您也可以使用带反向引用的捕获组:
sentence = re.sub(r"([a-zA-Z])\?([a-zA-Z])", r"\1fi\2", sentence)
见another regex demo。请注意,\1
引用了第一个([a-zA-Z])
组捕获的值,\2
引用了捕获到第2组(([a-zA-Z])
)的值。