在分隔符处拆分字符有条件地否定先行断言

split character at deliminator conditionally negative lookahead assertion

我想在 .: 处拆分字符串,除非下一个字符是 )

关注这个问题: 为什么不是

strsplit("Glenelg (Vic.)",'\.|:(?!\))', perl = TRUE)

返回

[[1]]
[1] "Glenelg (Vic)" 

而是在 . 处拆分,如下所示:

[1] "Glenelg (Vic" ")"           

分组不正确。 \.|:(?!\)) 匹配字符串中任意位置的 . 或未跟 ):。如果您将 .: 模式分组,'(?:\.|:)(?!\))',它将起作用。

但是,您可以使用基于字符的更好的正则表达式版本 class:

strsplit("Glenelg (Vic.)",'[.:](?!\))', perl = TRUE)
[[1]]
[1] "Glenelg (Vic.)"

在这里,[.:](?!\)) 匹配 .: 两者都没有紧跟 )

参见regex demo

您还可以使用 stringr

stringr::str_split("Glenelg (Vic.)","[\.:](?!\))")
[[1]]
[1] "Glenelg (Vic.)"