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