Python正则表达式在正则表达式之前拆分

时间:2015-11-22 18:11:25

标签: regex python-3.4

问题在于:

string ='abcdefghijklmn opabcedfg'

desired_result = ['abcdefghijklmn op','abcedfg']

我正在寻找正则表达式的“abc”:re.compile(r“abc”) 此后在这个正则表达式的基础上分裂。 这给出了: ['abc','defghijklmn op','abc','dfg']

我可以调整我的正则表达式以达到所需的分割吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用与此类似的正则表达式:

abc[^a]*(?:a(?!bc)[^a]*)*

请参阅regex demo

它会收集所有以abc开头,直到第一个abc符号或字符串结尾的子字符串。

正则表达式细分:

  • abc - 匹配abc
  • [^a]* - 匹配a
  • 以外的0个或多个字符
  • (?:a(?!bc)[^a]*)* - 匹配(但不捕获)0个或更多序列
    • a(?!bc) - 与a未匹配的bc匹配(因为我们匹配abc
    • [^a]* - 匹配a
    • 以外的0个或多个字符

它类似于abc.*?(?=$|abc)将捕获的内容,但不存在与延迟点匹配相关的问题。

Python code demo

p = re.compile(r'abc[^a]*(?:a(?!bc)[^a]*)*')
test_str = "abcdefghijklmn opabcedfg"
print(p.findall(test_str))

结果:['abcdefghijklmn op', 'abcedfg']