正则表达式仅在组合时匹配字符串

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

Regex demo

如果可以有多个白色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]

Python demo