我试图找到正确的正则表达式来检测以单个下划线结尾的字符串,例如hello_, this_
。到目前为止,我有re.match("[aA-zZ](_)", string)
,但是检测到字符串,例如day __,ball__,即带有两个我不想使用的下划线。任何有关如何最后得到一个下划线的字符串的想法。
谢谢
答案 0 :(得分:5)
您可以使用
re.search(r"(?<!_)_$", s)
请参见regex demo。请参阅正则表达式图:
详细信息
(?<!_)
-一个negative lookbehind,可确保在当前位置的左侧没有_
_
-下划线$
-字符串的结尾。请注意,您需要re.search
在字符串内的任何地方寻找匹配项,而不是re.match
仅在字符串的开头进行匹配。
答案 1 :(得分:3)
您可以使用此正则表达式:
REGEX = re.compile(r'[^_]_$')
REGEX.search(string)`
答案 2 :(得分:2)
您还可以更新角色类以使用a-z和A-Z,然后匹配单个下划线:
[a-zA-Z]_$
例如使用re.search
pattern = "[a-zA-Z]_$"
re.search(pattern, "day__")
请注意,[aA-zZ]
与[A-z]
中的[a-zA-Z]
is different
答案 3 :(得分:2)
我知道您要求使用正则表达式,但这也可以通过简单的方式完成:
s = "hello__"
s.endswith("_") and not s[:-1].endswith("_")
# False