串起2个连续的单词,其中包含2个z' s

时间:2014-10-13 04:57:55

标签: regex r string grep

我需要执行以下任务:字符串中包含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.我不知道为什么:(任何想法或帮助?

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"