要求对^,*,+

时间:2017-10-12 17:50:31

标签: python regex

我为措辞不好的问题道歉。

我有很多字符串,如:

  

“ODLS_ND33283633__PS1185”

第一个"_"之前的第一个字母是标题,其余字符(ND33283633__PS1185)是唯一ID。

我在python中编写了一个正则表达式,尝试删除第一个"_"期望的所有内容

  

“ND33283633__PS1185”

作为最终结果。

我想像:

.*_? or .+?_

会做到这一点,但事实并非如此......

我一直在努力编写各种正则表达式,但未能成功实现这一目标,最后上线并找到另一个人的答案,我可以将其作为一个例子重写为:

^[^_]+_

这给了我想要的结果,但现在我有些问题我无法找到答案:

我发现删除了前面的“^”并将其写为:

[^_]+_

导致正则表达式将所有内容删除到第二个“_”,因此生成的字符串为:

  

“_ PS1185”

我理解"^"标识为该行的开头,但我想知道为什么不包括它在前面没有“^”的情况下移除到第二个?

我的理解是[^_]+匹配的字符不等于"_"一次或多次,所以为什么在开头包含“^”会导致它在第一次停止,而排除它导致它在第二个停止?

另一件事,当我用"+"替换"*"符号时:

[^_]*_

我期待相同的结果,但得到了:

  

PS1185

我认为*匹配0或更多,而+匹配1或更多,所以它们实际上是相同的,除了+应该更加“严格”。然而,看到这些结果让我觉得我并不完全理解正则表达式是如何表现的。这里有没有人可以解释实际发生的事情?

0 个答案:

没有答案