如何从右边创建nongreedy正则表达式?

2024-09-29 23:28:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为“ab9c_xy8z_12a3.pdf”的文件。我要捕获最后一个下划线之后和“.pdf”之前的部分。 像写正则表达式:

    s = 'ab9c_xy8z_12a3.pdf'
    m = re.search(r'_.*?\.pdf',s)
    m.group(0)

退货: ''uxy8z_12a3.pdf'

在本例中,我只想捕获“12a3”部分。谢谢你的帮助。在


Tags: 文件researchpdfgroup本例xy8zuxy8z
2条回答

使用re.split代替:

>>> re.split('[_.]', 'ab9c_xy8z_12a3.pdf')[-2]
'12a3'

^{} regex首先用_匹配下划线,然后匹配除换行符之外的任何0+个字符,尽可能少地匹配,但直到.pdf最左边的出现处,它位于字符串的末尾。因此,.匹配了通往.pdf的所有下划线,这是因为正则表达式引擎解析字符串的方式(从左到右)和{}模式。在

您可以使用一个negated character class[^_]而不是{},它将从.模式中“减去”下划线。在

([^_]+)\.pdf

获取组1的值。参见regex demo。在

Python demo

^{pr2}$

相关问题 更多 >

    热门问题