我这里有这样的字符串:
a <- "-en eller -et eller (uofficielt) -'en eller (uofficielt) -'et"
b <- "-ten, -ter, -terne"
我想在 R 中使用正则表达式将文本从“-”提取到第一个非字符,从而得到:
en et 'en 'et
ten ter terne
我找到了一个解决方案,但它只是感觉不太令人满意或优雅
a <- unlist(strsplit(a, " |,"))
a <- a[grep("-", a)]
a <- gsub("-", "", a)
b <- unlist(strsplit(b, " |,"))
b <- b[grep("-", b)]
b <- gsub("-", "", b)
你有没有建议一个更优雅的单线,提取我想要的所有结局?
我认为您需要匹配-
前面没有字符字符的 a (即,当它是复合词的一部分时不匹配),并且'
连字符后面有一个可选的,然后是 1+ 字符字符。然后,您可以使用
a <- "-en eller -et eller (uofficielt) -'en eller (uofficielt) -'et"
b <- "-ten, -ter, -terne"
pat <- "\\B-\\K'?\\w+"
res_a <- regmatches(a, gregexpr(pat, a, perl=TRUE))
unlist(res_a)
## [1] "en" "et" "'en" "'et"
res_b <- regmatches(b, gregexpr(pat, b, perl=TRUE))
unlist(res_b)
## [1] "ten" "ter" "terne"
查看在线 R 演示
图案详情:
\\B
- 非单词边界-
- 一个连字符\\K
- 匹配重置运算符'?
- 一个可选的 '
\\w+
- 1 个或多个字母、数字或 _
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句