2016-10-04 225 views
0

的一部分,我有以下字符串正則表達式提取字符串

> ma1.andl_4_1000x20x20_k1=1,k2=2,k3=1.csv. 

我需要提取部分k1=1,k2=2,k3=1。我用R中的substr()來提取。

substr(str, 23, nchar(str) - 4) 

但是我正在尋找一個正則表達式來提取值。

+0

所以相當有價值的信息,它只是這一個字符串,你正在尋找一個確切的事情?如果你正在尋找確切的東西(這個問題不清楚),你難道不能簡單地瞄準你正在尋找的東西嗎?例如,爲什麼'gsub(「。+(k1 = 1,k2 = 2,k3 = 1)。+」,「\\ 1」,txt,perl = TRUE)'就足夠了? – Jota

回答

0

如果您需要提取k1=1,k2=2,k3=1的substr,如Jota指出的那樣,並且如果它是如此特定的字符串,那麼他的解決方案就是您想要的。

對於通用的解決方案,可以輕鬆捕獲kx=y,ka=b,kj=k你需要Capture a Repeated Group,您的團隊我是kx=y,其中x是任何數字,y是任何數字和,。爲了簡單起見,我忽略了點號.

REGEX

((?:k\d{1,}=\d{1,}(?:,|\.)?)+) 

BREAKDOWN

( - 開口捕獲托架

(?: - 打開非捕獲托架,這將被重複以捕獲整個圖案

k\d{1,}=\d{1,} - 膽量,允許kx=y

(?:,|\.) - 匹配逗號和最後一個點,以允許匹配的kx=y(?:,|.)

)+整個圖案 - 緊密非捕獲支架,重複該模式,以捕獲整個組

) - 關閉捕獲支架

...你就完成了。正則表達式將工作,但我根本不使用R因此無法測試。

閱讀的鏈接,整個網站是正則表達式

+0

@Jota我用正則表達式好友測試過,但不是在'R'中,我不知道你必須在'R' – gwillie

+0

中轉義元字符謝謝@gwillie的詳細解釋。這真的很有幫助。是的,數字確實改變了。 – SriniShine