我为措辞不好的问题道歉。
我有很多字符串,如:
“ODLS_ND33283633__PS1185”
第一个"_"
之前的第一个字母是标题,其余字符(ND33283633__PS1185)是唯一ID。
我在python中编写了一个正则表达式,尝试删除第一个"_"
期望的所有内容
“ND33283633__PS1185”
作为最终结果。
我想像:
.*_? or .+?_
会做到这一点,但事实并非如此......
我一直在努力编写各种正则表达式,但未能成功实现这一目标,最后上线并找到另一个人的答案,我可以将其作为一个例子重写为:
^[^_]+_
这给了我想要的结果,但现在我有些问题我无法找到答案:
我发现删除了前面的“^”并将其写为:
[^_]+_
导致正则表达式将所有内容删除到第二个“_”,因此生成的字符串为:
“_ PS1185”
我理解"^"
标识为该行的开头,但我想知道为什么不包括它在前面没有“^”的情况下移除到第二个?
我的理解是[^_]+
匹配的字符不等于"_"
一次或多次,所以为什么在开头包含“^”会导致它在第一次停止,而排除它导致它在第二个停止?
另一件事,当我用"+"
替换"*"
符号时:
[^_]*_
我期待相同的结果,但得到了:
PS1185
我认为*
匹配0或更多,而+
匹配1或更多,所以它们实际上是相同的,除了+应该更加“严格”。然而,看到这些结果让我觉得我并不完全理解正则表达式是如何表现的。这里有没有人可以解释实际发生的事情?