正则表达式返回匹配加上字符串直到下一个匹配

目标:根据数字或小数匹配将文本分解为列表,检索直到但不包括下一个匹配的所有文本。语言/版本:使用 python re.findall() 的 Python 3.8.5,我愿意接受替代建议。


文本示例(是的,全部在一行上):


 1 Something Interesting here 2 More interesting text 2.1 An example of 2C19 a header 2.3 Another header example 2.4 another interesting header 10.1 header stuff  14 the last interesting 3A4 header

目标输出:


['1 Something Interesting here',

'2 More interesting text',

'2.1 An example of 2C19 a header',

'2.3 Another header example',

'2.4 another interesting header',

'10.1 header stuff',

'14 the last interesting 3A4 header'

]

我可以使用以下方法识别大多数适当的整数/小数起点:


(\d+\.\d+)|([^a-zA-Z]\d\d)|( \d )


我正在努力寻找一种方法来返回匹配项之间的文本以及匹配项本身。


为了节省您一些时间,这是我的正则表达式沙箱


慕侠2389804
浏览 113回答 1
1回答

翻翻过去那场雪

您可以使用正向先行表达式来匹配,直到下一个匹配。这是更新的正则表达式(沙箱):\b(?:\d+(?:\.\d+)?)\b.*?(?=\b(?:\d+(?:\.\d+)?)\b|$)在Python中:regex = r'\b(?:\d+(?:\.\d+)?)\b.*?(?=\b(?:\d+(?:\.\d+)?)\b|$)'string = ' 1 Something Interesting here 2 More interesting text 2.1 An example of 2C19 a header 2.3 Another header example 2.4 another interesting header 10.1 header stuff  14 the last interesting 3A4 header'result = re.findall(regex, string)在这种情况下,result将是:>>> result['1 Something Interesting here ', '2 More interesting text ', '2.1 An example of 2C19 a header ', '2.3 Another header example ', '2.4 another interesting header ', '10.1 header stuff  ', '14 the last interesting 3A4 header']请注意,此解决方案还会提取末尾的间距。如果你不想要这个间距,你可以调用strip你的字符串:>>> [ match.strip() for match in result ]['1 Something Interesting here', '2 More interesting text', '2.1 An example of 2C19 a header', '2.3 Another header example', '2.4 another interesting header', '10.1 header stuff', '14 the last interesting 3A4 header']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python