要求澄清^,*+

2024-06-07 03:30:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我为这个措辞拙劣的问题道歉。你知道吗

我有很多字符串,比如:

"ODLS_ND33283633__PS1185"

第一个"_"之前的第一个字母是头,其余的(ND33283633\uu PS1185)是唯一的ID

我用python编写了一个regex,试图删除第一个"_"需要的所有内容

"ND33283633__PS1185"

作为最终结果。你知道吗

我想是这样的:

.*_? or .+?_

会成功的,但事实并非如此。。。你知道吗

我一直尝试编写各种正则表达式,但都没有成功,最后我上网找到了另一个人的答案,我可以用这个例子重写为:

^[^_]+_

这给了我想要的结果,但现在我有一些问题我想不出答案:

我发现去掉前面的“^”,写成:

[^_]+_

导致regex删除第二个“\”之前的所有内容,因此生成的字符串是:

"_PS1185"

我知道"^"标识为行的开头,但我想知道为什么不包括它,直到第二行前面没有“^”呢?你知道吗

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

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

[^_]*_

我期待着同样的结果,但却得到了:

PS1185

我认为*匹配0或更多,而+匹配1或更多,所以它们实际上是相同的,除了+应该更“严格”。然而,看到这些结果让我觉得我没有完全理解regex的行为。有人能解释一下到底发生了什么吗?你知道吗


Tags: or字符串答案id内容字母标识例子