分隔符处的拆分字符有条件的否定超前断言

时间:2018-11-19 23:15:39

标签: r regex pcre

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

以下问题:R strsplit: Split based on character except when a specific character follows为什么不

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

返回

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

相反,它在.处分裂,就像这样:

[1] "Glenelg (Vic" ")"           

2 个答案:

答案 0 :(得分:1)

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

但是,您可以根据字符类使用更好的正则表达式版本:

'(?:\\.|:)(?!\\))'

在这里,strsplit("Glenelg (Vic.)",'[.:](?!\\))', perl = TRUE) [[1]] [1] "Glenelg (Vic.)" [.:](?!\)).匹配,但都没有立即跟在:之后。

请参见regex demo

答案 1 :(得分:0)

您也可以使用stringr

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