python - 围绕空格分割字符串,中间不使用冒号

标签 python regex python-2.7 regex-lookarounds

我遇到一个问题,如果两个字符串之间有多个空格,我必须拆分字符串。但条件是,这一系列空格不应位于冒号 (:) 之后或之前(如情况 (C) 和 (D))。以下是我正在使用的正则表达式:

    str_ = re.split(r'(.+?)(?!<\:)(\s\s+)(?!\:)(.+)',text), 

其中文本可以是以下示例类型中的任何一种: 例如:

    foo1:bar1   foo2:bar2      (A)#O/P should be [foo1:bar1,foo2:bar2]
    foo1:bar1                  (B)#O/P should be [foo1:bar1]
    foo1    :bar1   foo2:bar2  (C)#O/P should be [foo1    :bar1,foo2:bar2]
    foo1    :bar1              (D)#O/P should be [foo1    :bar1]

例如(C)和(D),我正在 split ,而本不应该如此。请帮忙。

最佳答案

您可以使用

re.split(r'(?<![\s:])\s{2,}(?![\s:])', s)

详细信息

  • (?<![\s:]) - 没有空格或 :允许紧邻当前位置的左侧
  • \s{2,} - 两个或多个空格( \s\s+ 的较短变体)
  • (?![\s:]) - 没有空格或 :允许紧邻当前位置的右侧。

请参阅regex demo (出于演示目的,\s 替换为空格)。

Python demo :

import re
strs = ['foo1:bar1   foo2:bar2', 'foo1:bar1', 'foo1    :bar1   foo2:bar2', 'foo1    :bar1', 'f   :fdfd   f:f', 'f:   fdfd   f:f']
for s in strs:
    print(re.split(r'(?<![\s:])\s{2,}(?![\s:])', s))

输出:

['foo1:bar1', 'foo2:bar2']
['foo1:bar1']
['foo1    :bar1', 'foo2:bar2']
['foo1    :bar1']
['f   :fdfd', 'f:f']
['f:   fdfd', 'f:f']

关于python - 围绕空格分割字符串,中间不使用冒号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56057542/

相关文章:

Python:匹配并替换每行开头的所有空格

python - 如何用 beautiful soup 从此页面提取轨道标题

python - keras 中不兼容的密集层错误

python - pandas 日期列中的不同格式 - 列与行的数据类型

python+numpy : why does numpy. log 如果操作数太大会抛出属性错误?

c - 在 CUDA SDK 中使用正则表达式?

python - 哪个更快?设置比较还是计数器比较?为什么

python - 如何在 Python 中随机返回列表中最大元素之一的索引?

python - 如何在Python中加载Matlab的结构体(用v7.3保存)

python - 安装了 Anaconda Navigator 和 Python 3。