5

仅当在 in之后的一个单词and/ERT中没有被“/V”取代时,您将如何拆分:

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"    
4

3 回答 3

4

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

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

顺便说一句,不需要.后面的点。/V

编辑:我根据@smerny 的评论和您的编辑做了一些编辑。

于 2013-09-10T13:14:26.350 回答
4

实际上,您需要以另一种方式解决此问题:

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

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

\\S+顺便匹配非空格。

最后,可以安全地忽略最后一个时期。

正则表达式101演示

于 2013-09-10T13:19:23.097 回答
1

尝试这个:

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

问题是你的/V前面和后面是任何东西之一,你的例子在你的空间和你的/V.

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

演示

于 2013-09-10T13:18:49.090 回答