提取带有可选结尾模式的字符串

时间:2018-10-08 12:53:06

标签: python regex python-3.x

我想提取一个子字符串,该子字符串可能出现在两个子字符串之间或原始字符串的末尾。起始定界符为ab,结束定界符可以为cd或原始字符串的结尾。

示例:

c = 'ab123:random text1 cd4576:text2'
d = 'cd123:text2 ab75589:text1'
e = 'ab35:rand text2 cd765:text1'

所需答案:

c = 'random text1'
d = 'text1'
e = 'rand text2'

我能够将起始子字符串与re.findall('ab\d+:(.*)', i)匹配。但是当我尝试添加结束模式时,找不到所需答案:

re.findall('ab\d+:(.*)', i)
>>> ['random text1 cd4576: text2'], [' text1'], ['rand text2 cd765: text1']

re.findall('^ab\d+:(.*)cd\d+:', i)
>>>['random text1 '], [], ['rand text2 ']

2 个答案:

答案 0 :(得分:1)

您可以改用re.findall(r'\bab\d+:(.*?)(?:\s*\bcd|$)', i)

答案 1 :(得分:0)

尝试使用或“ |”与这样的团体:

re.findall('ab[^:]+:[ \t]*(.+)[ \t]*(cd[^:]+|$):', i)

您还需要排除内容本身内部的“ cd”(在这种模式下,空格用作分隔符,但可以想象像'ab123:random text1 de23:acdc cd4576:text2'这样的字符串的变体