gpt4 book ai didi

如果没有用单引号引起来,Python 正则表达式将替换字符串

转载 作者:太空宇宙 更新时间:2023-11-04 01:33:43 26 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式来替换没有被单引号括起来的字符串。例如,我想在以下字符串中用 XXX 替换 FOO:

string = "' FOO ' abc 123 ' def FOO ghi 345 ' FOO '' FOO ' lmno 678 FOO '"

期望的输出是:

output = "' FOO ' abc 123 ' def FOO ghi 345 ' XXX '' XXX ' lmno 678 FOO '"

我当前的正则表达式是:

myregex = re.compile("(?<!')+( FOO )(?!')+", re.IGNORECASE)

我想我必须使用环视运算符,但我不明白……正则表达式对我来说太复杂了:D

你能帮帮我吗?

最佳答案

具体做法如下:

import re

def replace_FOO(m):
if m.group(1) is None:
return m.group()

return m.group().replace("FOO", "XXX")

string = "' FOO ' abc 123 ' def FOO ghi 345 ' FOO '' FOO ' lmno 678 FOO '"

output = re.sub(r"'[^']*'|([^']*)", replace_FOO, string)

print(string)
print(output)

[编辑]

re.sub 函数将接受字符串模板或函数作为替换。如果替换是一个函数,每次找到匹配项时都会调用该函数,传递匹配对象,然后使用返回值(必须是字符串)作为替换字符串。

至于模式本身,当它搜索时,如果当前位置有一个 ',它将匹配并包括下一个 ',否则它'将匹配但不包括下一个 ' 或字符串的结尾。

替换函数将在每次匹配时调用并返回适当的结果。

其实现在想想,根本不需要用组。我可以这样做:

def replace_FOO(m):
if m.group().startswith("'"):
return m.group().replace("FOO", "XXX")

return m.group()

string = "' FOO ' abc 123 ' def FOO ghi 345 ' FOO '' FOO ' lmno 678 FOO '"

output = re.sub(r"'[^']*'|[^']+", replace_FOO, string)

关于如果没有用单引号引起来,Python 正则表达式将替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11792258/

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