正则表达式会自动忽略尾随空格吗?

时间:2014-04-07 23:30:01

标签: python regex nltk

为什么这两个表达式会返回相同的输出?

phillip = '#awesome '

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

VS

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

两者都返回:

{#}{awesome}

为什么第二个不返回

{#}{awesome}{ }?

2 个答案:

答案 0 :(得分:1)

这似乎是nltk在应用正则表达式之前正确删除字符串中的空格。

请参阅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会这样做,这对我来说似乎是个错误......

答案 1 :(得分:-1)

\w看起来与[A-Za-z0-9_]匹配。因为你正在寻找一个或另一个(1 +&#34;字&#34;字符或1 +非 - &#34;字&#34;字符),它将第一个字符与\w匹配角色并继续前进直到遇到不匹配

如果您进行全局匹配,您会看到另一个匹配包含空格(第一个非&#34;单词&#34;字符)。