正则表达式仅在组合时匹配字符串
Regex to match strings only if in combination
我需要通过以下方式匹配和替换文本
如果正文如下,则不应替换
home travel or home visit or home flight - then don't replace
如果文本如下,则应将其替换
travel or visit or flight - replace
我试过了
(?!(home|parents))(?=(flight|visit|travel))
怎么配成这样?
如果只有一个 space,您可以使用 2 个负向后视而不是前视。
(?<!\bhome )(?<!\bparents )\b(?:flight|visit|travel)\b
如果可以有多个白色space 字符,您可以捕获要保留的模式,并在替换中使用它。你想替换什么,你可以匹配(所以不要在组中捕获)
例如使用Python:
import re
strings = [
"home travel or home visit or home flight",
"travel or visit or flight"
]
pattern = r"\b((?:home|parents)\s+(?:flight|visit|travel))\b|\b(?:flight|visit|travel)\b"
for s in strings:
print(
re.sub(
pattern,
lambda x: x.group(1) if x.group(1) else "[replacement here]",
s
)
)
输出
home travel or home visit or home flight
[replacement here] or [replacement here] or [replacement here]
我需要通过以下方式匹配和替换文本
如果正文如下,则不应替换
home travel or home visit or home flight - then don't replace
如果文本如下,则应将其替换
travel or visit or flight - replace
我试过了
(?!(home|parents))(?=(flight|visit|travel))
怎么配成这样?
如果只有一个 space,您可以使用 2 个负向后视而不是前视。
(?<!\bhome )(?<!\bparents )\b(?:flight|visit|travel)\b
如果可以有多个白色space 字符,您可以捕获要保留的模式,并在替换中使用它。你想替换什么,你可以匹配(所以不要在组中捕获)
例如使用Python:
import re
strings = [
"home travel or home visit or home flight",
"travel or visit or flight"
]
pattern = r"\b((?:home|parents)\s+(?:flight|visit|travel))\b|\b(?:flight|visit|travel)\b"
for s in strings:
print(
re.sub(
pattern,
lambda x: x.group(1) if x.group(1) else "[replacement here]",
s
)
)
输出
home travel or home visit or home flight
[replacement here] or [replacement here] or [replacement here]