正则表达式检查 none 空词是否不是特定词

Regular expression check if none empty word is not a specific word

我想找到一种方法来匹配特定模式的字符串: <not 'self'>._<something>.

此模式应匹配这些字符串

object._attr
a._aaa

以及具有该模式的任何其他字符串,只要点之前的第一部分('object' 和 'a')不为空,并且不是文字字符串 'self' .下划线后的第二部分('attr' 和 'aaa')不能为空且只能包含单词字符。所以self._attr, object._不会匹配到

目前我正在尝试像这样使用负面预测

(?!self)\._(\w+?)

但问题是这个模式仍然匹配 self._attr,因为否定先行匹配点之前的空字符串。

我如何实际指定模式的第一部分必须是非空的。

希望我的问题表达得很好。

谢谢大家

您可以使用 -

((?!self)\w)+\.\w+

它会比正常情况下慢一些,因为在制作正则表达式时并没有考虑否定,但这是可能的。

*+ 确保至少有一个字符,因此您知道第一部分不为空

你可以试试

^((?!self).)+\._(\w+?)$

Regex demo


如果您没有匹配完整的字符串,您也在尝试匹配字符串的子部分,那么您可以使用 wordboundarylookarounds[=21 而不是锚点=]

使用环视

(?<!\S)((?!self).)+\._(\w+?)(?!\S)

使用单词 bouandry

\b((?!self).)+\._(\w+?)\b

如果您只想匹配字母,您可以将 . 替换为 [a-zA-Z]

^((?!self)[a-zA-Z])+\._(\w+?)$

您也可以通过匹配排除您不想要的内容,并将您想要的内容保留在一个组中。

\bself\._\w*|(\w+\.\_\w+)
  • \bself\._\w* 字边界,match self._ 和 0+ 个字字符
  • |
  • ( 捕获 组 1
    • \w+\.\_\w+ 匹配 1+ 个单词字符 ._ 和 1+ 个单词字符
  • ) 关闭群组

Regex demo | Python demo