gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:39 25 4
gpt4 key购买 nike

我正在尝试用另一个词替换字符串 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com