【问题标题】:splitting strings with multiple delimiters in python with re.split (from python cookbook)使用 re.split 在 python 中使用多个分隔符拆分字符串(来自 python 食谱)
【发布时间】:2014-07-18 11:55:34
【问题描述】:

在 Python Cookbook 3rd Edition 的第 2 章第 2.1 节中,您有以下内容:

>>> line = 'asdf fjdk; afed, fjek,asdf,      foo'
>>> import re
>>> re.split(r'[;,\s]\s*', line)
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']

是的,这是一个很好的例子...但是当我尝试删除正则表达式中的 \s* 时,它仍然具有相同的效果...见下文:

>>> re.split(r'[;,\s]*', line)
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']

那么,作者有什么想法让多余的\s* 用于任何其他目的,而不是不使用它更简单更短?

请提出您的意见。

【问题讨论】:

    标签: python regex csv cookbook


    【解决方案1】:

    我没有这本书,所以我不知道作者的意图。但是 David Beazley 和他们一样敏锐,所以我只能猜测这是为了区分这两行的输出。

    >>> line = 'asdf fjdk; afed, fjek,asdf,      foo'
    >>> line = 'asdf fjdk; ; afed, fjek,asdf,      foo'
    

    使用书中的正则表达式,第二行将是

    ['asdf', 'fjdk', '', 'afed', 'fjek', 'asdf', 'foo']
    

    并使用修改后的正则表达式

    ['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
    

    您的正则表达式将折叠组 [;,\s] 中未被匹配组中以外的字符分隔的所有符号。

    【讨论】:

    • 感谢您的输入.. 使用本书正则表达式的绝佳示例。
    【解决方案2】:

    两个正则表达式不同。

    • 第一个正则表达式指出,分隔符应该是逗号、分号或空格,可选地后跟空格

    • 第二个正则表达式指出,分隔符应该是一个或多个逗号、分号或空格。

    所以按照定义,如果你在下面的字符串上应用正则表达式,你可以很容易地找到区别

    line = 'asdf fjdk;; afed, fjek,asdf,      foo'
    

    所以结果现在会有所不同

    >>> re.split(r'[;,\s]*', line)
    ['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
    >>> re.split(r'[;,\s]\s*', line)
    ['asdf', 'fjdk', '', 'afed', 'fjek', 'asdf', 'foo']
    

    现在,您想要什么正则表达式取决于您要处理的输入是什么,以及所有可接受的测试用例的期望输出是什么。

    【讨论】:

    • 感谢您的输入.. 使用本书正则表达式的绝佳示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多