2013-07-25 53 views
1

我有一個regex邊緣案例,我無法解決。我需要grep從字符串中刪除前導句點(如果存在)和後一句點後的文本(如果存在)。在字符串中刪除最後一段時間後的文本

也就是說,給出一個矢量:

x <- c("abc.txt", "abc.com.plist", ".abc.com") 

我希望得到的輸出:

[1] "abc"  "abc.com" "abc" 

前兩種情況都已經解決了我在this related question獲得幫助。但是,對於領先的第三種情況不適用.

我相信這是微不足道的,但我沒有建立聯繫。

+1

的答案沒有解決的情況下'.abc.com'到'abc'它實際上不是一個重複..我希望他們做到了。也許我做了一些錯誤複製,如果是的話,我會刪除這個qn - 請告知 – ricardo

+2

我剛剛意識到這一點。這是一個可以按預期做的事情:'sub(「^ [。] *(。*)[。]。* $」,「\\ 1」,x)'。我會投票重新開放。 – Arun

+0

我已投票重新開放,但我仍然認爲這可以合理地納入其他問題。 – Thomas

回答

3

此正則表達式你想要做什麼:

^\.+|\.[^.]*$ 

用空字符串替換其配對。

在R:

gsub("^\\.+|\\.[^.]*$", "", subject, perl=TRUE); 

說明:

^  # Anchor the match to the start of the string 
\.+ # and match one or more dots 
|  # OR 
\.  # Match a dot 
[^.]* # plus any characters except dots 
$  # anchored to the end of the string. 
+0

'perl = TRUE'在這裏並不是絕對必要的,儘管它也沒有傷害。 –

+0

+1 /接受。非常感謝 - 這是完美的。另外,我真的很感謝你爲增加解釋做出的努力。我處於正則表達式學習曲線最陡的部分。 – ricardo

相關問題