我正在尝试用另一个词替换字符串 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,你好吗"
因此,正则表达式应包括我要替换的单词未被 NUMBERS 或 LETTERS 包围。
最佳答案
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/