2016-11-09 49 views
0

我試圖創建一個代碼,可以在最後(或字符串的開頭)找到「$^$」。

這裏是我的代碼有

library(stringr) 
literalstring <- c("$$^dfgerg$^$", "$^$sgsgr", "gheugberhu$^$fgdbrbe") 

在這裏,我創建一個隨機字符串後($^$)來測試我的代碼

str_view_all(literalstring, "($^$)$" , match=TRUE) 
str_view_all(literalstring, "^($^$)" , match=TRUE)` 

這裏$被指定我能找到字符串末尾的$^$。相反,這適用於「^($^$)」

這些都不會返回我正在尋找。

回答

3

?regex 

...找到的元字符的完整列表。 (明顯地,「^」和「$」將在該向量中,因爲它們表示字符串空的開始和結尾。當在字符類之外使用時,所有元字符都需要被轉義(在之前,兩個反斜槓) 。在R模式(因爲 「^」 也有字符類中的特殊規則,我沒有使用 「[$] [^] [$]」)所以,試試這個:

str_view_all(literalstring, "(\\$\\^\\$$)$|^(\\$\\^\\$)" , match=TRUE) 

垂直酒吧或「管」是正則表達式(和R)或運營商,但我誤解你的請求,答案是:

end_loc <- str_view_all(literalstring, "\\$\\^\\$$" , match=TRUE) 
beg_loc <- str_view_all(literalstring, "^\\$\\^\\$" , match=TRUE) 
0

rex包是真正有用的指定regex。特別是,它會自動轉義特殊功能。

library(stringr) 
library(rex) 

rex("$^$") 
#> \$\^\$ 

literalstring <- c("$$^dfgerg$^$", "$^$sgsgr", "gheugberhu$^$fgdbrbe") 
str_view_all(literalstring, rex(("$^$" %if_prev_is% start) %or% ("$^$" %if_next_is% end))) 

節目匹配

enter image description here

匹配regex這裏(其中其它答案匹配到lookarounds)是

(?:(?:(?<=^)\$\^\$)|(?:\$\^\$(?=$))) 

rex描述如下:

  • $^$如果它直接開始後如下,
  • $^$如果它是由端直接跟隨。
相關問題