正则表达式是否自动忽略尾随空格?

2024-05-26 11:11:43 发布

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

为什么这两个表达式返回相同的输出?你知道吗

phillip = '#awesome '

nltk.re_show('\w+|[^\w\s]+', phillip)

nltk.re_show('\w+|[^\w]+', phillip)

两者都返回:

{#}{awesome}

为什么第二个不回来

{#}{awesome}{ }?

Tags: re表达式showawesomenltkphillip
2条回答

似乎在应用正则表达式之前,nltkright会去除字符串中的空白。你知道吗

参见the source code(或者您可以import inspectprint inspect.get_source(nltk.re_show)

def re_show(regexp, string, left="{", right="}"):
    """docstring here   I stripped it for  brevity"""
    print(re.compile(regexp, re.M).sub(left + r"\g<0>" + right, string.rstrip()))

特别是,请参见string.rstrip(),它去除所有尾随空格。你知道吗

例如,如果确保phillip字符串右侧没有空格:

nltk.re_show('\w+|[^\w]+', phillip + '.')
# {#}{awesome}{ .}

不知道为什么nltk会这样做,这对我来说似乎是个bug。。。你知道吗

^{}看起来与[A-Za-z0-9_]匹配。由于您正在查找一个或另一个字符(1+“word”字符或1+非“word”字符),它将第一个字符匹配为\w字符,并一直匹配到不匹配的。你知道吗

如果进行全局匹配,将看到另一个匹配包含空格(第一个非“word”字符)。你知道吗

相关问题 更多 >