Python正则表达式排除一个字符

hor*_*_vr 1 python regex

有一个文本列表:

l=["SOMETHING","SOME_1","SOM_1"]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个正则表达式模式来匹配第一个字符串,但不匹配第二个字符串:

  • TRUE如果文本以 'SOM' 开头,可能有一些其他字符,并且没有下划线,则返回;
  • 因此,FALSE如果文本以 'SOM' 开头并且至少包含一个下划线(文本内的某处,下划线在哪里并不重要),则返回

这是我尝试过的,但不起作用:

import re
l=["SOMETHING","SOME_1","SOM_1"]
find_pattern=re.compile("^SOM[A-Z]*[^_]")
for s in l:
    print bool(find_pattern.match(s))
Run Code Online (Sandbox Code Playgroud)

我期待:

True
False
False
Run Code Online (Sandbox Code Playgroud)

但我认为乘法操作数不正确,因为我得到:

True
True
False
Run Code Online (Sandbox Code Playgroud)

Unb*_*ess 5

import re
l=["SOMETHING","SOME_1","SOM_1"]
find_pattern=re.compile("^SOM[^_]*$")
for s in l:
    print bool(find_pattern.match(s))
Run Code Online (Sandbox Code Playgroud)

打印预期结果:

True
False
False
Run Code Online (Sandbox Code Playgroud)

在该模式中,请注意锚点的重要性$。如果不存在,您将收到误报。