R grep匹配点

时间:2015-10-02 22:41:18

标签: regex r

所以当我做

时,我有两个字符串,如mylist<-c('claim', 'cl.bi')
grep('^cl\\.*', mylist)

它返回1和2.但如果我这样做

grep('^cl\\.', mylist)

它只会返回2.那么为什么第一个匹配'claim'?期间匹配发生了什么?

4 个答案:

答案 0 :(得分:2)

* 操作符告诉引擎匹配它前面的令牌&#34;零或更多&#34;倍。在第一种情况下,引擎尝试匹配文字点&#34;零或更多&#34;时间 - 可能根本没有。

基本上,如果您使用*运算符,如果没有(.

的实例,它仍会匹配

更好的可视化:

*      --→   equivalent to {0,}      --→   match preceding token (0 or more times)
\\.*   --→   equivalent to \\.{0,}   --→   match ., .., ..., etc or an empty match
                                                                       ↑↑↑↑↑

答案 1 :(得分:2)

"^cl\\.*"匹配"claim"因为*量词因此定义(此处引用?正则表达式):

'*' The preceding item will be matched zero or more times.

"claim"包含行首,后跟c,后跟l,后跟零(在本例中)或更多点,以满足所有要求一场成功的比赛。

如果您只想匹配以cl.开头的字符串,请使用一次或多次量词,+,如下所示:

grep('^cl\\.+', mylist, value=TRUE)
# [1] "cl.bi"

答案 2 :(得分:1)

量词*表示零次或多次。注意。它适用于前面的标记,在您的情况下为\.

简而言之,cl部分匹配,并且不需要点。

以下是两种情况的匹配子串:

claim
--

cl.bi
---

答案 3 :(得分:1)

简化其他人所说的内容:es.index(index="test", doc_type="trial", id = val_1, body = {"name": val2 } ) 仅相当于'^cl\\.*',因为'^cl'匹配*

的0次出现

\\.强制它与实际点匹配。它相当于'^cl\\.'