python - 用于替换不在引号之间的特定单词的正则表达式

标签 python regex string regex-negation regex-lookarounds

我正在尝试用另一个词替换字符串 s 中的 Hello,如果该词不在引号(例如“”或 ' ')之间。让我们假设替换词是 Matt so,

这是输入:

s = 'Hello How Are you, "hey Hello", \'ney Hello\'. Hello I\'m great'

期望的输出:

s = 'Matt How are you, "hey Hello", \'ney Hello\'. Matt I\'m great '

我四处搜索并发现了这段代码,几乎没有修改我成功地替换了这个词,但它只适用于 ' ' 而不是 ""包括在内

import re

def replace_method(match):

    if match.group(1) is None:
        return match.group()

    return match.group().replace("Hello", "Matt")

s = 'Hello How Are you, "hey Hello", \'ney Hello\'. Hello I\'m great'

output = re.sub(r"'[^']*'|([^']*)", replace_method, s)
print(output)

编辑:

感谢您的回答,但我错过了解释一些重要的事情(我第一次注意到,在我的辩护中,在执行成功的代码之后),“显然”我不想要这句话:

s = "你好,你好吗"

成为

s = "Markna,你好吗"

因此,正则表达式应包括我要替换的单词未被 NUMBERSLETTERS 包围。

最佳答案

import re


def replace_word(input, search, replace):
    def replace_method(match):
        if match.group(2) is None:
            return match.group()
        return match.group(2).replace(search, replace)
    expr = re.compile("('[^']*'|\"[^\"]*\")|({})".format(search))
    return re.sub(expr, replace_method, s)

s = 'Hello How Are you, "hey Hello", \'ney Hello\'. Hello I\'m great'

output = replace_word(s, "Hello", "Matt")
print(output)

您可以匹配第 1 组中单引号或双引号之间的所有内容(('[^']*'|\"[^\"]*\")),然后是您在组中的单词2({},使用 search 术语格式化),然后用您想要的任何内容替换第 2 组。

关于python - 用于替换不在引号之间的特定单词的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56159177/

相关文章:

python - TensorFlow 简单 XOR 示例不收敛

python - os.kill 没有引发 OSError,但是我没有看到给定的 pid 正在运行

python - 如何加速Python脚本迭代嵌套循环?

c# - 正则表达式获取大括号之间的文本,偶尔缺少大括号

html - 如何在Notepad++中使用regex(正则表达式)删除所有不包含特定字符串的HTML和JSON代码?

java - 正则表达式匹配两个单词

javascript - 将对象转换为字符串

python - 定义我的轴的限制,但使用 matplotlib 在两个方向上具有相同的比例

python - 在python中拆分逗号分隔的字符串

java - 通过 maxLines 参数和字符数剪切字符串