You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中提取符号间字符串并存储为向量

提取字符串中的术语并转为向量

现有如下R代码定义的字符串:

mystring <- "

-Acanthosis nigricans
-Hyperpigmentation
-Hyperkeratosis
-Skin fold regions
-Neck
-Groin
-Axillae
-Obesity 
-Drug-induced AN
-Malignant AN"

目标是提取位于\n-和\n之间的术语,最终得到如下向量:

> mystring_extracted
 [1] "Acanthosis nigricans" "Hyperpigmentation"    "Hyperkeratosis"       "Skin fold regions"   
 [5] "Neck"                 "Groin"                "Axillae"              "Obesity"             
 [9] "Drug-induced AN"      "Malignant AN"

之前用gsub("\n-", "", mystring)仅替换了分隔符,导致所有术语连在一起,无法得到独立元素。以下是几种可行的解决方法:

方法一:基础R的strsplit

先清理字符串首尾空白(包括开头空行),再按\n-分割,最后处理每个术语的多余空格:

# 去除首尾空白字符
clean_string <- trimws(mystring)
# 按\n-分割字符串,取结果列表的第一个元素
mystring_extracted <- strsplit(clean_string, "\n-")[[1]]
# 清理每个术语的首尾空格(比如Obesity后的空格)
mystring_extracted <- trimws(mystring_extracted)

方法二:使用stringr包的str_extract_all

利用正则表达式的断言规则,直接匹配所有目标术语:

library(stringr)
# 匹配\n-之后、下一个\n或字符串结尾前的内容
mystring_extracted <- str_extract_all(mystring, "(?<=\n-).*?(?=\n|$)")[[1]]
# 清理空格
mystring_extracted <- trimws(mystring_extracted)

方法三:基础R的gregexpr+regmatches

通过正则定位匹配位置,再提取对应内容:

# 使用Perl风格正则匹配目标内容
match_positions <- gregexpr("(?<=\n-).*?(?=\n|$)", mystring, perl = TRUE)
# 根据位置提取内容
mystring_extracted <- regmatches(mystring, match_positions)[[1]]
# 清理空格
mystring_extracted <- trimws(mystring_extracted)

运行任意一种方法后,都能得到预期的向量结果。

内容的提问来源于stack exchange,提问作者Adrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:35:45