为什么正则表达式预搜索中的模式符号 + 无效? python3中的正则表达式预搜索模式。
details are as follows 我的目的是匹配符号点和点左侧的任意数量的相邻数字,以提取不匹配的部分。如
"Contents156.html" -> "Contents" ;
"PingHang12Report_ipad1_1269.html" ->"PingHang12Report_ipad1_" ;
但是现在看来,由于“环顾四周是原子”,该模式不起作用。那我该怎么办?
答案 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')]