【发布时间】:2020-07-03 18:53:20
【问题描述】:
我缺乏使用正则表达式的经验,需要帮助解决这个问题:
目标:创建一个匹配任意字符串中的“renal”或“kidney”的正则表达式模式,前提是它不包含“carcinoma”。
示例字符串:
- “肾细胞癌”
- “肾透明细胞癌”
- “慢性肾功能不全”
预期输出: 正则表达式模式与前两个字符串中的“renal”和“kidney”不匹配;它确实匹配第三个字符串中的“renal”(因为没有“carcinoma”)。
我的尝试: (?here 和here,lookbehinds 被限制为基本上非零长度;正则表达式不能向后应用任意长度。
那么什么正则表达式模式可以解决问题?我想要一个模式来保持关注(或“锚定”在)“肾”和“肾”而不是“癌”。
【问题讨论】:
-
您可以从字符串
^(?!.*\bcarcinoma\b).*\b(renal|kidney)\b.*regex101.com/r/1FVdio/1 的开头使用负前瞻 -
这行得通,非常感谢!让我确保我理解它:它锚定在字符串的开头(带有 ^);对癌进行非零长度的负前瞻,然后包括肾或肾。
-
是的,如果“包含”是指匹配前面(从字符串开头)零个或多个字符的“肾”或“肾”。如果没有锚,对于字符串
"my kidney is great",负前瞻将得到满足,之后正则表达式的指针将位于"kidney"的"k"和"i"之间,因为从该位置"kidney"不会出现在其余的字符串。因此需要锚点。 -
一般来说,要断言字符串 不 包含特定字符串,就像这里一样,使用带有锚点
^的否定前瞻(或者可能是\A,具体取决于关于语言和应用程序)。要断言字符串 does 包含特定字符串,请使用具有相同锚点的正向前瞻。
标签: regex