【问题标题】:python split and re.split not capturing what appear to be either tabs or spaces in stringpython split 和 re.split 没有捕获字符串中的制表符或空格
【发布时间】:2014-06-07 12:29:51
【问题描述】:

我有一个类似的字符串:

'Agendas / Schedules meetings and speakers       4 F     1928-1209       Box 2'

我正在尝试将其拆分为似乎是标签的内容。虽然如果我使用print repr(str) 打印,我只会在末尾看到特殊字符:

'Agendas / Schedules meetings and speakers       4 F     1928-1209       Box 2\r\n'

如果我尝试print re.split('\t+', str)print re.split('\s+', str) 之类的东西,则没有任何内容被拆分,即输出仍然:

['Agendas / Schedules meetings and speakers       4 F     1928-1209       Box 2\r\n']

如果正则表达式不起作用,有没有办法隔离这些固定宽度的项目?

更新:我希望只在较大的空白处进行拆分,因此 .split() 创建每个单词的列表元素并不是我想要的。

【问题讨论】:

  • 如果已解决。为什么不将其复制并粘贴到正则表达式中?
  • 你说 python split 不起作用,但你没有显示结果。如果你这样做str.split() 会发生什么?哦,你应该避免调用你的变量str,因为它会影响python内置。
  • 你能把' '.join('%02x' % ord(c) for c in str)的输出贴出来吗?您还应该注意 str 是一个错误的变量名,因为它掩盖了内置的

标签: python regex string python-2.7 split


【解决方案1】:

过去我遇到过几次,您可能遇到过 Zero-Width-Space 的情况。

>>> s = 'Agendas / Schedules meetings and speakers       4 F     1928-1209       Box 2'
>>> re.split(ur'[\u200b\s]+', s, flags=re.UNICODE)

['Agendas', '/', 'Schedules', 'meetings', 'and', 'speakers', '4', 'F', '1928-1209', 'Box', '2']

【讨论】:

  • 打印repr 时不会显示unicode 字符吗?
【解决方案2】:

string 的 split() 方法默认会在空格处分割。所以:

print str.split()

应该可以解决问题。

【讨论】:

    【解决方案3】:

    感谢大家的意见。没有意识到 python 有一个零宽度空间错误 (http://bugs.python.org/issue13391)

    无论如何,在多个空格上进行匹配似乎可以解决问题:

    >>>re.split('\s{2,}', s)
    ['Agendas / Schedules meetings and speakers', '4 F', '1928-1209', 'Box 2']
    >>> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      相关资源
      最近更新 更多