我有一堆字符串,其中一些字符串以..t.
结尾。我试图找到一个匹配这些字符串的正则表达式,但处理完全停止让我头疼!
我试过了
grep('^.+(..t.)$', myStrings)
但这也匹配w...gate
等字符串。我想我正在处理错误的句号。任何帮助都赞赏。
注意:我在R中使用grep。
答案 0 :(得分:8)
由于您只是检查字符串的结尾是否以..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}
来匹配两个点而不是两次转义\\.\\.
答案 1 :(得分:2)
k,一点点更好的谷歌搜索提供了答案;
grep("^.+(\\.\\.t\\.)$", myStrings)
这是有效的,因为我们需要在R中将\\.
转义为<。<}。
答案 2 :(得分:0)
点(.
)只匹配单个字符..删除dot的含义你应该在dot char(\\
)之前使用双斜杠。
试试这个......
grep('^.+(\\.\\.t\\.)$', myStrings)
Satheesh Appu