我遇到一个问题,如果两个字符串之间有多个空格,我必须拆分字符串。但条件是,这一系列空格不应位于冒号 (:) 之后或之前(如情况 (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
替换为空格)。
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/