为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2023-07-27 16:43:48
目标:根据数字或小数匹配将文本分解为列表,检索直到但不包括下一个匹配的所有文本。语言/版本:使用 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 )我正在努力寻找一种方法来返回匹配项之间的文本以及匹配项本身。为了节省您一些时间,这是我的正则表达式沙箱
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

您可以使用正向先行表达式来匹配,直到下一个匹配。


这是更新的正则表达式(沙箱):


\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']


查看完整回答
反对 回复 2023-07-27
  • 1 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信