2016-11-09 6 views
0

最後(または文字列の先頭)に「$^$」があるコードを作成しようとしています。ここで

は、私は($^$)の後に$は、私がすることができるように指定することで自分のコードここ

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

をテストするために、ランダムな文字列を作成し、私はここで

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

を持っているコードです文字列の最後にある$^$を見つけてください。逆のことが "^($^$)"に適用されます

これらのどちらも、私が探しているものを返しません。メタ文字の完全なリストを見つける

答えて

3

?regex 

を見に...。文字クラスの外側で使用された場合、メタ文字はすべてエスケープされる必要があります(2つのが先行します)。 Rのパターンで( "^" はまた、文字クラス内の特別なルールを持っているので、私が使用していないよ "[^] [$]を[$]"。)したがって、この試してみてください。

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

垂直にバーや「パイプ」正規表現(およびR)がOR演算子しかし、私はあなたの要求を読み違えると、答えは次のようになります。

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

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

あるがrex説明読み取りと一致します

  • $^$それは端が直接続いている場合には、スタート直後
  • 又は
  • $^$に従う場合。
関連する問題