Python 正则表达式 - 只替换几个词
Python regex - Replace all but a few words
假设您有以下字符串:
"badger randomword badger mushroom mushroom somethingelse"
我想保留单词 "badger" 和 "mushroom",并用 "mushroom" 替换所有其他单词:
"badger mushroom badger mushroom mushroom mushroom"
但我找不到匹配 "everything except the words badger and mushroom" 的正则表达式。你能帮帮我吗?
这会起作用
(?!\bbadger\b|\bmushroom\b)\b[^\s]+\b
Python代码
p = re.compile(r'(?!\bbadger\b|\bmushroom\b)\b[^\s]+\b')
test_str = "badger randomword badger mushroom mushroom somethingelse"
subst = "mushroom"
result = re.sub(p, subst, test_str)
您可以将 re.sub
与函数参数一起使用,这将使模式变得非常简单:
import re
s = "badger randomword badger mushroom mushroom somethingelse"
re.sub('\w+', lambda x: 'badger' if x.group(0) == 'badger' else 'mushroom', s)
一个非正则表达式的解决方案(并且更容易阅读)是这样的:
oldstring = "badger randomword badger mushroom mushroom somethingelse"
newstring = ""
for part in oldstring.split(" "):
if part in ["badger", "mushroom"]:
newstring += part
else:
newstring += "mushroom"
newstring += " "
newstring = newstring[:-1]
执行此任务的一个简单的非正则表达式行将是 -
new_string = ' '.join(word if word == 'badger' else 'mushroom' for word in original_string.split())
我建议不要在这里使用复杂的正则表达式,因为 Beautiful Is Better Than Ugly in Python。
试试这个
(?!badger\b)\b\w+\b
解释:
(?!…)
:否定前瞻sample
\
:转义特殊字符sample
\w
: "word character": ASCII 字母、数字或下划线 sample
+
:一个或多个 sample
Python
import re
p = re.compile(ur'(?!badger\b)\b\w+\b')
test_str = u"badger randomword badger mushroom mushroom somethingelse"
subst = u"mushroom"
result = re.sub(p, subst, test_str)#badger mushroom badger mushroom mushroom mushroom
假设您有以下字符串:
"badger randomword badger mushroom mushroom somethingelse"
我想保留单词 "badger" 和 "mushroom",并用 "mushroom" 替换所有其他单词:
"badger mushroom badger mushroom mushroom mushroom"
但我找不到匹配 "everything except the words badger and mushroom" 的正则表达式。你能帮帮我吗?
这会起作用
(?!\bbadger\b|\bmushroom\b)\b[^\s]+\b
Python代码
p = re.compile(r'(?!\bbadger\b|\bmushroom\b)\b[^\s]+\b')
test_str = "badger randomword badger mushroom mushroom somethingelse"
subst = "mushroom"
result = re.sub(p, subst, test_str)
您可以将 re.sub
与函数参数一起使用,这将使模式变得非常简单:
import re
s = "badger randomword badger mushroom mushroom somethingelse"
re.sub('\w+', lambda x: 'badger' if x.group(0) == 'badger' else 'mushroom', s)
一个非正则表达式的解决方案(并且更容易阅读)是这样的:
oldstring = "badger randomword badger mushroom mushroom somethingelse"
newstring = ""
for part in oldstring.split(" "):
if part in ["badger", "mushroom"]:
newstring += part
else:
newstring += "mushroom"
newstring += " "
newstring = newstring[:-1]
执行此任务的一个简单的非正则表达式行将是 -
new_string = ' '.join(word if word == 'badger' else 'mushroom' for word in original_string.split())
我建议不要在这里使用复杂的正则表达式,因为 Beautiful Is Better Than Ugly in Python。
试试这个
(?!badger\b)\b\w+\b
解释:
(?!…)
:否定前瞻sample
\
:转义特殊字符sample
\w
: "word character": ASCII 字母、数字或下划线 sample
+
:一个或多个 sample
Python
import re
p = re.compile(ur'(?!badger\b)\b\w+\b')
test_str = u"badger randomword badger mushroom mushroom somethingelse"
subst = u"mushroom"
result = re.sub(p, subst, test_str)#badger mushroom badger mushroom mushroom mushroom