所以当我做
时,我有两个字符串,如mylist<-c('claim', 'cl.bi')
grep('^cl\\.*', mylist)
它返回1和2.但如果我这样做
grep('^cl\\.', mylist)
它只会返回2.那么为什么第一个匹配'claim'
?期间匹配发生了什么?
答案 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'
匹配*
\\.
强制它与实际点匹配。它相当于'^cl\\.'