在分隔符处拆分字符有条件地否定先行断言
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.)"
我想在 .
或 :
处拆分字符串,除非下一个字符是 )
关注这个问题:
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.)"