• 字符串和文本处理技巧


    复杂文本分隔:

      你需要将一个字符串分割为多个字段,但是分隔符(还有周围的空格)并不是固定的。

    解决办法:

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

    Note:

      当你使用 re.split() 函数时候,需要特别注意的是正则表达式中是否包含一个括号捕获分组。 如果使用了捕获分组,那么被匹配的文本也将出现在结果列表中。比如,观察一下这段代码运行后的结果:

    1 >>> fields = re.split(r'(;|,|s)s*', line)
    2 >>> fields
    3 ['asdf', ' ', 'fjdk', ';', 'afed', ',', 'fjek', ',', 'asdf', ',', 'foo']
    4 >>>

    获取分割字符在某些情况下也是有用的。 比如,你可能想保留分割字符串,用来在后面重新构造一个新的输出字符串:

     1 >>> values = fields[::2]
     2 >>> delimiters = fields[1::2] + ['']
     3 >>> values
     4 ['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
     5 >>> delimiters
     6 [' ', ';', ',', ',', ',', '']
     7 >>> # Reform the line using the same delimiters
     8 >>> ''.join(v+d for v,d in zip(values, delimiters))
     9 'asdf fjdk;afed,fjek,asdf,foo'
    10 >>>

    如果你不想保留分割字符串到结果列表中去,但仍然需要使用到括号来分组正则表达式的话, 确保你的分组是非捕获分组,形如 (?:...) 。比如:

    1 >>> re.split(r'(?:,|;|s)s*', line)
    2 ['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
    3 >>>
     

      

  • 相关阅读:
    《锋利的jQuery》补充笔记
    sass学习笔记
    《HTML5与CSS3基础教程》学习笔记 ——补充
    ajax常见问题(部分)
    html新特性(部分)
    less 笔记
    《JavaScript高级程序设计》补充笔记2
    《JavaScript高级程序设计》补充笔记1
    《CSS3秘笈》备忘录
    显示实现接口的好处c#比java好的地方
  • 原文地址:https://www.cnblogs.com/crawer-1/p/8202797.html
Copyright © 2020-2023  润新知