如何使用正则表达式在 R 中删除具有特定开头和结尾的字符串段?

How to delete a segment of a string with a specific start and end in R using regular expressions?

我有一个字符串。

str = c("F14 : M114L","W15 : M116L, W15 : M118L","W15 : D111L, F14 : E112L, F14 : M116L")

目标是删除 : 和 L 之间的任何内容(也包括 : 前面的白色 space,这样我最终会得到

"F14", "W15, W15", "W15, F14, F14"

我正在考虑使用

gsub(" : [[:alnum:]]L", "", str)

但显然它不起作用。不知道是否有类似通配符的东西可以表示 : 和 L 之间的任意数量的数字和字符。

这样做就可以了:

gsub(" : .*?L", "", str)
#[1] "F14"           "W15, W15"      "W15, F14, F14"

几种方法。

如果总是三个,取前几个字母:

substr(str,1,3)

我个人也喜欢stringr。它使提取变得非常简单。设计你想要的,而不是你不想要的。

library(stringr)
str_extract(str,"[A-Z][0-9]*")

我已经将这些简化为一个矢量,但是你有子元素,你需要这样的东西:

splits <- strsplit(str,", ")
result <- lapply(splits, substr, start = 1, stop = 3 )

result <- lapply(splits, str_extract, pattern = "[A-Z][0-9]*")

您可以使用我维护的 qdapRegex 包轻松完成此操作:

str = c("F14 : M114L","W15 : M116L, W15 : M118L","W15 : D111L, F14 : E112L, F14 : M116L")

library(qdapRegex)
rm_between(str, "\s:", "L")
## [1] "F14"           "W15, W15"      "W15, F14, F14"

qdapRegex 的目标是在教学中发挥作用。如果您对使用的正则表达式感兴趣...

S("@rm_between", "\s:", "L")
## [1] "(\s:)(.*?)(L)"

gsub(S("@rm_between", "\s:", "L") , "", str)