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

如何用R的stringr包从长向量中提取完整的变量赋值表达式?

问题描述

现有存储在单个长向量中的文本内容如下:

&nuSessao=26.2023
&nuSessao=21.2013.N
&nuSessao=24.2023
&Data=22/12/2023
&txFaseSessao=Ordem do Dia
&txFaseSessao=Fechamento

需要提取指定变量(如&nuSessao)的所有完整赋值表达式,最终得到如下向量:

[1] "&nuSessao=26.2023"   "&nuSessao=21.2013.N" "&nuSessao=24.2023" 

尝试使用以下代码:

results<-stringr::str_extract_all(MyPage, "&amp;amp;nuSessao=*") |> unlist()

但结果仅重复返回变量名部分,而非完整表达式:

results
 [1] "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
 [5] "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
 [9] "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
[13] "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
[17] "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
[21] "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
[25] "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
[29] "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
[33] "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
[37] "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
[41] "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
[45] "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
[49] "&amp;amp;nuSessao=" "&amp;amp;nuSessao="
解决方法

方法一:修正正则表达式

之前的正则&amp;amp;nuSessao=*中,=后面的*表示匹配0个或多个=,而非匹配变量值。需要修改为匹配=之后直到换行符的所有内容,正确的正则如下:

results <- stringr::str_extract_all(MyPage, "&amp;amp;nuSessao=.+") |> unlist()

如果需要更严谨(比如处理可能的空值或特殊字符),可以使用[^\\n]+匹配换行符之外的所有字符:

results <- stringr::str_extract_all(MyPage, "&amp;amp;nuSessao=[^\\n]+") |> unlist()

方法二:先分割再筛选

如果文本是按换行符分隔的,也可以先将长向量分割为单行元素,再筛选包含目标变量的行:

# 分割为单行
lines <- stringr::str_split(MyPage, "\\n") |> unlist()
# 筛选包含目标变量的行
results <- lines[stringr::str_detect(lines, "&amp;amp;nuSessao=")]

这两种方法都能得到预期的完整赋值表达式向量。# 问题
我有一个存储在单个长向量中的文本文件,内容包含如下赋值表达式:

&amp;nuSessao=26.2023
&amp;nuSessao=21.2013.N
&amp;nuSessao=24.2023
&amp;Data=22/12/2023
&amp;txFaseSessao=Ordem do Dia
&amp;txFaseSessao=Fechamento

我希望提取指定变量的所有完整赋值表达式并保存到向量中,预期结果如下:

[1] "&amp;nuSessao=26.2023"   "&amp;nuSessao=21.2013.N" "&amp;nuSessao=24.2023" 

尝试使用以下命令后,仅得到重复的变量名部分,而非完整表达式:

results <- stringr::str_extract_all(MyPage, "&amp;nuSessao=*") |> unlist()

返回结果:

results
 [1] "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao="
 [5] "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao="
 [9] "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao="
[13] "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao="
[17] "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao="
[21] "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao="
[25] "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao="
[29] "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao="
[33] "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao="
[37] "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao="
[41] "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao="
[45] "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao=" "&amp;nuSessao="
[49] "&amp;nuSessao=" "&amp;nuSessao="
解决方法

错误原因

原正则表达式&amp;nuSessao=*中的*是正则量词,作用是匹配前面的=字符0次或多次,因此只会捕获&amp;nuSessao=部分,无法获取等号后的赋值内容。

方案1:修正正则表达式直接提取

使用[^\\n]+匹配等号后除换行符外的所有字符,确保捕获整行的完整赋值:

library(stringr)
# 提取所有以&nuSessao=开头的完整赋值表达式
results <- str_extract_all(MyPage, "&amp;nuSessao=[^\\n]+") |> unlist()

方案2:拆分文本后筛选(更直观)

先将长向量拆分为单行,再筛选以目标变量开头的行:

library(stringr)
# 把长文本拆分为单独的行
lines <- str_split(MyPage, "\\n") |> unlist()
# 筛选以&nuSessao=开头的行
results <- lines[str_detect(lines, "^&amp;nuSessao=")]

两种方案都能得到预期的完整赋值表达式向量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:35:55