R:仅在特殊正则表达式条件不匹配时分割

时间:2013-09-10 13:06:50

标签: regex r strsplit

只有当后面的一个单词中的“/ V”没有成功时,你才会在每个and/ERT分割?

text <- c("faulty and/ERT something/VBN and/ERT else/VHGB and/ERT as/VVFIN and/ERT not else/VHGB propositions one and/ERT two/CDF and/ERT three/ABC")

# my try - !doesn't work
> strsplit(text, "(?<=and/ERT)\\s(?!./V.)", perl=TRUE)
                                    ^^^^

# Exptected return
[[1]]    
[1] "faulty and/ERT something/VBN and/ERT else/VHGB and/ERT as/VVFIN and/ERT"
[2] "not else/VHGB propositions one and/ERT"
[3] "two/CDF and/ERT"            
[4] "three/ABC"    

3 个答案:

答案 0 :(得分:4)

实际上你犯了一个小小的错误,但它导致一切都不起作用:

(?<=and/ERT)\\s(?![^\\s/]+/V)
                  ^^^^^^^
            match one or more characters that are not white space or forward slash /

顺便说一下,.之后不需要点/V

编辑:我根据@ smerny的评论和您的编辑进行了一些修改。

答案 1 :(得分:3)

实际上,你需要以另一种方式解决这个问题:

(?<=and/ERT)\\s(?!\\S+/V)
                  ^^^^

您需要使用\\S+,因为即使.*出现前两个字,使用/V也会阻止匹配。

\\S+顺便提一下非空格。

最后,可以安全地忽略最后一段时间。

regex101 demo

答案 2 :(得分:1)

试试这个:

(?<=and/ERT)\\s(?![a-zA-Z]+/V)

问题在于,您的/V之前和之后都是其中之一,而您的示例在您的空间与/V之间有多个字符。

[a-zA-Z]+/V确保空格和/ V之间唯一的东西是由字母组成的单个单词。我相信这是您的要求,基于您的描述和给出的示例。

Demo