我有一个问题,如果两个字符串之间有个以上空格,则必须拆分字符串。但条件是,一系列空格不应跟随冒号(:)或位于冒号之前(例如(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),我正在分裂,但不应该分裂。请帮忙。
答案 0 :(得分:1)
我建议仅在此处使用re.findall
input = "foo1 :bar1 foo2:bar2"
result = re.findall(r'\S+\s*:\s*\S+', input)
print(result)
['foo1 :bar1', 'foo2:bar2']
简化的正则表达式模式匹配:
\S+ one or more non whitespace characters
\s* which are followed by optional whitespace
: followed by a colon and
\s* more optional whitespace
\S+ one or more non whitespace characters
答案 1 :(得分:1)
您可以使用
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']