python3

时间:2018-11-01 04:02:41

标签: python-3.x

为什么正则表达式预搜索中的模式符号 + 无效? python3中的正则表达式预搜索模式。

details are as follows 我的目的是匹配符号点和点左侧的任意数量的相邻数字,以提取不匹配的部分。如

"Contents156.html" -> "Contents" ; 
"PingHang12Report_ipad1_1269.html" ->"PingHang12Report_ipad1_" ; 

但是现在看来,由于“环顾四周是原子”,该模式不起作用。那我该怎么办?

1 个答案:

答案 0 :(得分:0)

您正在使用?=,它“下一个匹配但不消耗任何字符串”。您的.*与返回值匹配(包括2位数字),而?=部分找到一个数字和一个点作为“下一个”部分。与?=匹配的内容将不会出现在最终结果中。

如果您需要.*部分的非贪婪匹配,请改用.*?

re.findall(r'.*?(?=\d+\.)', 'PingHang12Report_ipad1_1269.html')
# => ['PingHang12Report_ipad1_', '', '', '', '']`

您可以在其中获取第一个元素。

另一种方法,

re.findall(r'(.*?)(\d+\..*)', 'PingHang12Report_ipad1_1269.html')
# => [('PingHang12Report_ipad1_', '1269.html')]