2014-09-12 92 views
3

我有一串字符串,其中一些字符串以..t.結尾。我試圖找到一個正則表達式來匹配這些字符串,但處理完整的停頓令我頭疼!R包含滿檔的字符串的正則表達式

我已經試過

grep('^.+(..t.)$', myStrings) 

但這也匹配的字符串,如w...gate。我想我正在處理錯誤的全程。任何幫助都很感激。

注:我使用的內R. grep的

回答

2

K,更好的谷歌搜索一點點給出了答案;

grep("^.+(\\.\\.t\\.)$", myStrings) 

這工作,因爲我們需要躲避點作爲\\.在R.

+0

我知道的 - 在1分鐘內回答顯示研究差。我想我只是碰到了一個更好的谷歌搜索術語 - 真的不想嘗試垃圾郵件。 – Joe 2014-09-12 10:56:49

+1

假設你有一個字符串'str1 < - c(「something..t。」,「w ... gate」,「w1..tg」,「w2..t.g5」,「w1 ... t 。「)'代碼匹配1和5.是否有意? – akrun 2014-09-12 11:00:19

+0

是的,這是打算 - 他的字符串必須以'..t.'結尾。在此之前的任何內容都是有效的 – Joe 2014-09-12 11:01:34

0

的點(.)只有一個字符匹配..去除斑點的意義ü點字符前,應使用雙斜槓(\\)。

試試這個,而不是.....

grep('^.+(\\.\\.t\\.)$', myStrings) 

Satheesh APPU

+0

您的答案無效。你必須經常逃避''''R – 2014-09-12 11:22:01

+0

是的大衛,你是對的。必須逃脫\像這樣grep('^ \\。+(\\。\\。t \\。)$',myStrings) – 2014-09-12 11:34:13

5

既然你如果字符串的結尾與..t.結束只檢查,可以消除你的模式^.+

正則表達式語法中的點.是一個character of special meaning,它匹配除了換行符序列以外的任何字符。要匹配一個字面點或任何其他特殊含義的字符,你需要跳過\\它。

> x <- c('foo..t.', 'w...gate', 'bar..t.foo', 'bar..t.') 
> grep('\\.{2}t\\.$', x) 
# [1] 1 4 

或者將該字符放在character class的內部。

> x <- c('foo..t.', 'w...gate', 'bar..t.foo', 'bar..t.') 
> grep('[.]{2}t[.]$', x) 
# [1] 1 4 

注:我使用的範圍操作\\.{2}匹配兩個點,而不是逃避它兩次\\.\\.

+0

這絕對會更好!謝謝。將等待一天,如果沒有更好的解決方案(我懷疑它)會接受答案。 – Joe 2014-09-12 14:22:26

+0

已經過了一兩天了...... – RyanfaeScotland 2016-09-02 14:18:16

相關問題