如何使用正则表达式在 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)
我有一个字符串。
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)