zoukankan      html  css  js  c++  java
  • 字符串和文本处理技巧

    复杂文本分隔:

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

    解决办法:

    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 >>>
     

      

  • 相关阅读:
    java 获取未知枚举的集合(get unknown enum list)
    解析Disruptor:写入ring buffer
    解析Disruptor:拼接依赖
    Python3.x在linux下print中文问题
    Python3源码方式编译
    正则表达式学习
    PHP传值和传引用、传地址的区别
    php中关于sizeof()函数
    [原]JointJS流程图
    [原]OpeanLayers3 For ArcGIS MapServer
  • 原文地址:https://www.cnblogs.com/crawer-1/p/8202797.html
Copyright © 2011-2022 走看看