我需要执行以下任务:字符串中包含2个连续的单词,每个单词包含2个z' s。假设单词由字母组成(小写和大写都可以),并用1个空格分隔。不允许其他角色。 Grep是唯一允许的命令。
我这样做了:
text2 = c("zip dog"," szszzz dsdfaarzdzzz","zip dog carz","Zzip zzck")
G= grep("([^zZ]*)([zZ])([^zZ]*)([zZ])([^zZ]*)( ){1}([^zZ]*)([zZ])([^zZ]*)([zZ])([^zZ]*)",text2,fixed=FALSE)
但它正在阅读2和4.我不知道为什么:(任何想法或帮助?
答案 0 :(得分:0)
或者实际上你想"显示"输出的文本?
library(stringr)
text2 = c("zip dog"," szszzz dsdfaarzdzzz","zip dog carz","Zzip zzck")
G= str_trim(grep("([^zZ]*)([zZ])([^zZ]*)([zZ])([^zZ]*)( ){1}([^zZ]*)([zZ])([^zZ]*)([zZ])([^zZ]*)",text2,fixed=FALSE, value=TRUE))
G
# [1] "szszzz dsdfaarzdzzz" "Zzip zzck"
答案 1 :(得分:0)
这可能有用。
# (?i)(?:^|[ ])[a-z]*z[a-z]*z[a-z]*[ ][a-z]*z[a-z]*z[a-z]*(?:$|[ ])
(?i)
(?: ^ | [ ] )
[a-z]* z
[a-z]* z
[a-z]*
[ ]
[a-z]* z
[a-z]* z
[a-z]*
(?: $ | [ ] )
或者,使用捕获缓冲区
# (?i)(?:^|[ ])([a-z]*z[a-z]*z[a-z]*[ ][a-z]*z[a-z]*z[a-z]*)(?=$|[ ])
(?i)
(?: ^ | [ ] )
(
[a-z]* z
[a-z]* z
[a-z]*
[ ]
[a-z]* z
[a-z]* z
[a-z]*
)
(?= $ | [ ] )
答案 2 :(得分:0)
检查
(\w*?)(?i-msnx:zz)(\w*?)( )(\w*?)(?i-msnx:zz)(\w*?)
答案 3 :(得分:0)
此任务的较短正则表达式是:
(?i)\\w*zz\\w*\\s\\w*zz
查找匹配字符串的索引
grep("(?i)\\w*zz\\w*\\s\\w*zz", text2)
# [1] 2 4
包含匹配项的完整字符串
grep("(?i)\\w*zz\\w*\\s\\w*zz", text2, value = TRUE)
# [1] " szszzz dsdfaarzdzzz" "Zzip zzck"