只有当后面的一个单词中的“/ 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"
答案 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+
顺便提一下非空格。
最后,可以安全地忽略最后一段时间。
答案 2 :(得分:1)
试试这个:
(?<=and/ERT)\\s(?![a-zA-Z]+/V)
问题在于,您的/V
之前和之后都是其中之一,而您的示例在您的空间与/V
之间有多个字符。
[a-zA-Z]+/V
确保空格和/ V之间唯一的东西是由字母组成的单个单词。我相信这是您的要求,基于您的描述和给出的示例。