簡體   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