2012-12-24 166 views
-1

我要第三下劃線和點之間的額外的字母數字,下面的例子正則表達式

CSV_20121023000854Z_MMSC_35dbc3f813.csv 

預期輸出:

35dbc3f813 

這regix會但是解決了這個問題(\_\w{15}\_\w{4}\_)(\w+),我如果字符串大小增加,它會更靈活。謝謝

回答

2

爲什麼不是這樣的?

_([^_]+)\.csv 

它會捕獲最後一個下劃線和.csv之間的所有內容。

或者,你可以用你選擇的語言把它分解:在貪婪模式

>>> s = 'CSV_20121023000854Z_MMSC_35dbc3f813.csv' 
>>> s.split('.')[0].split('_')[-1] 
'35dbc3f813' 
+0

這是我正在尋找..謝謝 – user1902849

1
_(\w+)\.csv 

正則表達式的工作,它將繼續與模式匹配,並提取匹配這是最後一個模式在你的情況下需要的字符串。

+0

奇怪的是,這不適用於JavaScript和Python的正則表達式引擎。 '_(。*?)\。csv' – Blender

+0

我也認爲user1902849在他的問題中需要更具描述性,以便知道確切的環境。順便說一句..你的第二個解決方案也不錯:) – Rahul

+0

你如何測試你的正則表達式? – Blender

0

這裏是不關心的下劃線之間串的長度的正則表達式:

^.*?_.*?_.*?_(\w+)\..*$ 

匹配部分甚至可以具有(第三下劃線之後匹配)在它的下劃線。點的可以出現在第三個下劃線之前。

這裏是行動的它的一個例子: http://regex101.com/r/jT9fR0

0

您曾說過,有三個突出存在於輸入字符串中的字符如果確定部分字符之間,

1) _字符,那麼正則表達式應該是這樣的:

.+?_.+?_.+?_(.+)\..+ 

2)如果沒有,那麼正則表達式應該是這樣的:

.*?_.*?_.*?_(.+)\..* 

貪婪的操作符後的問號使操作員不情願。