问题在于:
string ='abcdefghijklmn opabcedfg'
desired_result = ['abcdefghijklmn op','abcedfg']
我正在寻找正则表达式的“abc”:re.compile(r“abc”) 此后在这个正则表达式的基础上分裂。 这给出了: ['abc','defghijklmn op','abc','dfg']
我可以调整我的正则表达式以达到所需的分割吗?
谢谢!
答案 0 :(得分:1)
您可以使用与此类似的正则表达式:
abc[^a]*(?:a(?!bc)[^a]*)*
请参阅regex demo
它会收集所有以abc
开头,直到第一个abc
符号或字符串结尾的子字符串。
正则表达式细分:
abc
- 匹配abc
[^a]*
- 匹配a
(?:a(?!bc)[^a]*)*
- 匹配(但不捕获)0个或更多序列
a(?!bc)
- 与a
未匹配的bc
匹配(因为我们匹配abc
)[^a]*
- 匹配a
它类似于abc.*?(?=$|abc)
将捕获的内容,但不存在与延迟点匹配相关的问题。
p = re.compile(r'abc[^a]*(?:a(?!bc)[^a]*)*')
test_str = "abcdefghijklmn opabcedfg"
print(p.findall(test_str))
结果:['abcdefghijklmn op', 'abcedfg']