R语言如何获取指定模式每一次出现对应的行号
实现方案
你可以通过统计每行的模式匹配次数,再将行号按次数重复来实现需求,以下是两种可直接使用的实现方式:
基础R实现(无需额外安装包)
# 逐行匹配所有"<table"的位置,fixed=TRUE表示按固定字符串匹配,避免特殊字符解析问题 matches <- gregexpr("<table", html_file, fixed = TRUE) # 统计每行的有效匹配次数,无匹配的行计数为0 match_counts <- vapply(matches, function(x) sum(x > 0), FUN.VALUE = integer(1)) # 按匹配次数重复对应行号,得到最终结果 line_num <- rep(seq_along(html_file), match_counts)
输出的line_num就会按照匹配次数重复对应行号,正好符合你期望的199 217 217 219效果。
stringr包实现(语法更简洁)
如果你习惯使用tidyverse生态的工具,可以用stringr::str_count直接统计每行匹配次数:
library(stringr) # 统计每行`<table`的出现次数 match_counts <- str_count(html_file, fixed("<table")) # 生成结果行号 line_num <- rep(seq_along(html_file), match_counts)
提示:如果你的匹配规则需要用到正则表达式,去掉代码中的
fixed = TRUE参数即可。
内容的提问来源于stack exchange,提问作者user16596066
相关产品推荐
相关产品推荐

