【发布时间】:2014-09-12 10:51:32
【问题描述】:
我有一堆字符串,其中一些以..t. 结尾。我正在尝试找到一个正则表达式来匹配这些字符串,但是处理句号让我很头疼!
我试过了
grep('^.+(..t.)$', myStrings)
但这也匹配诸如w...gate之类的字符串。我想我处理的句号不正确。任何帮助都非常感谢。
注意:我在 R 中使用 grep。
【问题讨论】:
我有一堆字符串,其中一些以..t. 结尾。我正在尝试找到一个正则表达式来匹配这些字符串,但是处理句号让我很头疼!
我试过了
grep('^.+(..t.)$', myStrings)
但这也匹配诸如w...gate之类的字符串。我想我处理的句号不正确。任何帮助都非常感谢。
注意:我在 R 中使用 grep。
【问题讨论】:
由于您只检查字符串的结尾是否以..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} 匹配两个点,而不是转义两次\\.\\.
【讨论】:
k,更好的谷歌搜索提供了答案;
grep("^.+(\\.\\.t\\.)$", myStrings)
这是可行的,因为我们需要在 R 中将这一点转义为 \\.。
【讨论】:
str1 <- c("something..t.", "w...gate", "w1..tg", "w2..t.g5", "w1...t.") 代码匹配1和5。这是故意的吗?
..t. 结尾。在此之前的任何内容都是有效的
点(.)只匹配单个字符。要删除点的含义,你应该在点字符(\\)之前使用双斜杠。
试试这个.....
grep('^.+(\\.\\.t\\.)$', myStrings)
Satheesh 应用程序
【讨论】: