繁体   English   中英

如何从右边创建非贪婪的正则表达式?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM