R语言中带字符串的多行文本抽取

xpcnnkqh  于 2023-02-01  发布在  R语言
关注(0)|答案(2)|浏览(224)

我的 Dataframe 中有一列包含自由文本
我想提取INDICATIONS FOR EXAMINATION之后和下一个大写行之前的文本。在下面的示例中,结果将是“Anaemia”

INDICATIONS FOR EXAMINATION
Anaemia

PROCEDURE PERFORMED
Gastroscopy (OGD)

我遇到了一些麻烦,因为我正在使用stringr,我似乎不能得到多行匹配。我一直在使用:

EoE$IndicationsFroExamination<-str_extract(EoE$Endo_ResultText, '(?<=INDICATIONS FOR EXAMINATION).*?[A-Z]+')
g52tjvyc

g52tjvyc1#

这需要一点挖掘。您可以使用regex()修饰符函数。
1.使用multiline参数打开多行拟合:

str_extract_all("a\nb\nc", "^.")
# [[1]]
# [1] "a"

str_extract_all("a\nb\nc", regex("^.", multiline = TRUE))
# [[1]]
# [1] "a" "b" "c"

1.请注意dotall参数,它将打开".*"的多行行为:

str_extract_all("a\nb\nc", "a.")
# [[1]]
# character(0)

str_extract_all("a\nb\nc", regex("a.", dotall = TRUE))
# [[1]]
# [1] "a\n"

这些都记录在stringi::stri_opts_regex()中,stringr::regex()将参数传递给stringi::stri_opts_regex()

ltskdhd1

ltskdhd12#

我将正则表达式做得更通用一些,这样它将匹配所有出现的情况,并使用stringr中的str_extract_all包:

matches <- str_extract_all(str, "(?<=[A-Z]\n)([^\n]*)")

根据您提供的字符串,该函数应返回:

[[1]]
[1] "Anaemia"           "Gastroscopy (OGD)"

相关问题