[英]How to create non-greedy regular expression from right?
我有一个名为'ab9c_xy8z_12a3.pdf'的文件。 我想捕获最后一个下划线之后和'.pdf'之前的部分。 写正则表达式如:
s = 'ab9c_xy8z_12a3.pdf'
m = re.search(r'_.*?\.pdf',s)
m.group(0)
返回:'_ xin8z_12a3.pdf'
在这个例子中,我想只捕获'12a3'部分。 谢谢您的帮助。
_.*?\\.pdf
正则表达式将第一个下划线与_
匹配,然后匹配除换行符之外的任何0 +字符,尽可能少,但最接近最后一个出现的.pdf
,结果最后的字符串。 所以, .
只是因为正则表达式引擎分析字符串(从左到右)的方式,因此匹配所有下划线到.pdf
.
图案。
您可以通过使用否定字符类 [^_]
而不是使用来修复模式.
这将“减去”下划线.
图案。
([^_]+)\.pdf
并获取Group 1值。 请参阅正则表达式演示 。
Python演示 :
import re
rx = r"([^_]+)\.pdf"
s = "ab9c_xy8z_12a3.pdf"
m = re.search(rx, s)
if m:
print(m.group(1)) # => 12a3
请改用re.split
:
>>> re.split('[_.]', 'ab9c_xy8z_12a3.pdf')[-2]
'12a3'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.