Python 正则表达式检查是否没有空单词不是特定单词

Python 正则表达式检查是否没有空单词不是特定单词,python,regex,regex-lookarounds,Python,Regex,Regex Lookarounds,我想找到一种方法来匹配特定模式中的字符串: 。 此模式应与这些字符串匹配 object._attr a._aaa 以及具有该模式的任何其他字符串,只要点('object'和'a')前面的第一部分不是空的,并且不是文本字符串'self'。下划线后面的第二部分('attr'和'aaa')不能为空,只能包含单词字符。因此,self.\u attr,object.\u将不匹配 目前,我正试图像这样使用消极的前瞻 (?!self)\._(\w+?) 但问题是,该模式仍然与self.\u attr匹配,

我想找到一种方法来匹配特定模式中的字符串:

此模式应与这些字符串匹配

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

目前,我正试图像这样使用消极的前瞻

(?!self)\._(\w+?)
但问题是,该模式仍然与self.\u attr匹配,因为负前瞻与点之前的空字符串匹配

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

希望我的问题措辞恰当


谢谢大家

您可以使用-

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

它会比正常的速度慢一点,因为正则表达式并没有考虑否定,但这是可能的

*+确保至少有一个字符,以便您知道第一部分不是空的

您可以尝试

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


如果您没有匹配完整的字符串,那么您也在尝试匹配字符串的子部分,那么您可以使用
wordboundary
lookarounds

使用lookaround

(?<!\S)((?!self).)+\._(\w+?)(?!\S)
如果只想匹配字母表,可以将
替换为
[a-zA-Z]

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

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

\bself\._\w*|(\w+\.\_\w+)
  • \bself\.\uw*
    单词边界,
    匹配self.\uu
    和0+单词字符
  • |
  • Capturegroup 1
    • \w+\.\\uw+
      匹配1+字字符
      。\uuu
      和1+字字符
  • 关闭组

|

这是一个非常好的表示,您使用了什么制作它?@KaranShishoo这被称为regex可视化工具,这就是为什么不简单地
\bself\._\w*|(\w+\.\_\w+)