如何使用 R 提取两个字符之间的上下文,同时仍保留这两个信号?
How to use R to extract a context between two characters while still keeping these two signals?
例如:
a <- 'i am a <> student <>'
我想在保留> 和< 的同时提取或替换> 和< 之间的上下文。所以,如果是提取,那么结果是:
student
如果将其替换为 --,则结果为:
'i am a <>--<>'
我已经尝试了 str_extract 和 str_replace_all,但它们没有用。
使用 sub
仅替换一次:
a <- 'i am a <> student <>'
out <- sub(">[^<]+<", ">--<", a)
out
[1] "i am a <>--<>"
仅提取一个上下文:
sub("^.*>\s*([^<]+?)\s*<.*$", "\1", a)
[1] "student"
既然你提到了 str_extract
和 str_replace
,我们可以通过以下方式将它们与正面前瞻和后视正则表达式一起使用。
library(stringr)
str_extract(a, "(?<=<> ).*(?= <>)")
#[1] "student"
并在 str_replace
中使用相同的正则表达式
str_replace(a, "(?<=<>).*(?=<>)", "--")
#[1] "i am a <>--<>"
例如:
a <- 'i am a <> student <>'
我想在保留> 和< 的同时提取或替换> 和< 之间的上下文。所以,如果是提取,那么结果是:
student
如果将其替换为 --,则结果为:
'i am a <>--<>'
我已经尝试了 str_extract 和 str_replace_all,但它们没有用。
使用 sub
仅替换一次:
a <- 'i am a <> student <>'
out <- sub(">[^<]+<", ">--<", a)
out
[1] "i am a <>--<>"
仅提取一个上下文:
sub("^.*>\s*([^<]+?)\s*<.*$", "\1", a)
[1] "student"
既然你提到了 str_extract
和 str_replace
,我们可以通过以下方式将它们与正面前瞻和后视正则表达式一起使用。
library(stringr)
str_extract(a, "(?<=<> ).*(?= <>)")
#[1] "student"
并在 str_replace
str_replace(a, "(?<=<>).*(?=<>)", "--")
#[1] "i am a <>--<>"