【问题标题】:Split string by comma unless followed by a space or a '+'除非后跟空格或“+”,否则用逗号分割字符串
【发布时间】:2020-07-24 14:22:03
【问题描述】:

我正在尝试用逗号分隔一个极长的字符串。但是,我有两个要求:

  1. 逗号后面不能跟空格
  2. 逗号后面不能跟“+”号

例如,输入将是:

text = "hello,+how are you?,I am fine, thanks"

这个输出是:

['hello,+how are you?', 'I am fine, thanks']

即分隔值的唯一逗号是后面没有“+”或空格的逗号

我已管理要求 1) 如下:

re.split(r',(?=[^\s]+)',text)

我不知道如何添加需求 2)

【问题讨论】:

  • @mk 无需转义:re.split(r',(?=[^\s+])',text) == ['hello,+how are you?', 'I am fine, thanks']
  • re.split(r',(?![+ ])', text) , 的内容,除非后面有 + 字符或空格。
  • @Anthony,不起作用,结果是:['hello,+how are you?', ' am fine, thanks']

标签: python regex string split


【解决方案1】:

最简单的解决方案是只查找您不想要的模式,并完全排除它。您可以在正则表达式中使用负前瞻来做到这一点。

>>> text = "hello,+how are you?,I am fine, thanks"
>>> re.split(r',(?![+ ])', text)
['hello,+how are you?', 'I am fine, thanks']

这将匹配 ,,除非它后跟文字 +space

【讨论】:

    【解决方案2】:

    试试这个

    re.split(r',(?=[^\s +])',text)
    

    【讨论】:

    • 为什么\s+之间有空格?
    • 我认为空间就像或在这里。它给出这个输出['你好,+你好吗?','我很好,谢谢'],这不是正确的吗?
    • (\s +),我的意思是,(空格或加号),'\s'=空格,''=或,'+'=加号
    • ' ' 并不意味着“或”。 [ ] 中的所有字符都已经是“或”了。
    【解决方案3】:

    我建议您使用@HampusLarsson 的答案,但我想挤入一个不使用导入模块的答案:

    s = "hello,+how are you?,I am fine, thanks"
    
    ind = [0]+[i for i,v in enumerate(s)
               if v == ',' and s[i+1] not in [' ','+']]
    
    parts = [s[i:j].lstrip(',')
             for i,j in zip(ind, ind[1:]+[None])]
    
    print(parts)
    

    输出:

    ['hello,+how are you?', 'I am fine, thanks']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2014-08-09
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多