正则表达式匹配和替换模式中的字符

时间:2018-04-16 14:18:45

标签: regex regex-negation regex-group

我想在字符串中用"?"替换字符"fi"

我可以为此编写一个通用的str替换。但我想取代“?”只有它出现在两个A-Za-z字符之间并且避免其余的

例如,"Okay?"应该是"Okay?“而不是"Okayfi"

Modi?es应该修改,因为它有吗?在中间

我尝试了什么?

sentence = re.sub(r"(\?)\b", "fi", sentence)

请看这里。 https://regexr.com/3nvk3

似乎在regexr中工作正常。但在代码中不能很好地工作。我做错了吗?

1 个答案:

答案 0 :(得分:1)

此处最好的方法是使用 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]))的值。