Python 3.x python3中的正则表达式搜索前模式

Python 3.x python3中的正则表达式搜索前模式,python-3.x,Python 3.x,为什么正则表达式预搜索中模式的符号+无效? python3中的正则表达式预搜索模式 我的目的是匹配符号点和点左侧任何数量的相邻数字,以便提取不匹配的部分。比如 "Contents156.html" -> "Contents" ; "PingHang12Report_ipad1_1269.html" ->"PingHang12Report_ipad1_" ; 但现在,由于“环视是原子的”,这种模式似乎不起作用。那么我该怎么做呢?您使用的是“匹配下一个但不使用任何字符串”的?=。

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

我的目的是匹配符号点和点左侧任何数量的相邻数字,以便提取不匹配的部分。比如

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

但现在,由于“环视是原子的”,这种模式似乎不起作用。那么我该怎么做呢?

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

如果您需要
*
零件的非贪婪匹配,请改用
*?

re.findall(r'.*?(?=\d+\.)', 'PingHang12Report_ipad1_1269.html')
# => ['PingHang12Report_ipad1_', '', '', '', '']`
在这里,您可以只取第一个元素

另一种方法是

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

谢谢我的目的是匹配符号点和点左侧任何数量的相邻数字,以便提取不匹配的部分。如“Contents156.html”->“Contents”;“PingHang12Report\uIPAD1\u1269.html”->“PingHang12Report\uIPAD1”;但现在看来这种模式不起作用了,因为“环视是原子的”?那我该怎么做呢。我的目的是匹配符号点和点左侧任何数量的相邻数字,以便提取不匹配的部分。如“Contents156.html”->“Contents”;“PingHang12Report\uIPAD1\u1269.html”->“PingHang12Report\uIPAD1”;但现在看来这种模式不起作用了,因为“环视是原子的”?那么还有其他方法吗?@Y.Kod是一种简单的非贪婪方法,
re.findall(r.*?(?=\d+\),“PingHang12Report\u ipad1\u 1269.html”)
,这给你提供了
[“PingHang12Report\u ipad1”、“”、“”、“”、“”]
,你可以简单地选择第一个element@Y.Kod或者,如果需要剩余部分
r'(.*)(\d+\..*),您可以将这两部分分开“
。即使文件名中有另一个点,这也很好。但是我有点困惑。模式1:'.*(?=\d+\)'模式2:'.*(=\d+\)'非贪婪和贪婪?有什么信息可以用来理解吗?Thanks@Y.Kod你可以查找,搜索非贪婪的