如何替换字符串中的匹配项并索引每个匹配项

施耐德

一个特定的字符串可以包含我试图匹配的模式的多个实例。例如,如果我的模式是<N(.+?)N>,我的字符串是"My name is <N Timon N> and his name is <N Pumba N>",那么有两个匹配项。我想用包含替换匹配项的索引的替换项替换每个匹配项。

所以在我的字符串中"My name is <N Timon N> and his name is <N Pumba N>",我想将字符串更改为 read "My name is [Name #1] and his name is [Name #2]"

我如何做到这一点,最好是用一个单一的功能?并且最好使用来自stringr或 的函数stringi

亚兰

您可以使用gregexprregmatches在 Base R 中执行此操作

my_string = "My name is <N Timon N> and his name is <N Pumba N>"

# Get the positions of the matches in the string
m = gregexpr("<N(.+?)N>", my_string, perl = TRUE)

# Index each match and replace text using the indices
match_indices = 1:length(unlist(m))

regmatches(my_string, m) = list(paste0("[Name #", match_indices, "]"))

结果:

> my_string
# [1] "My name is [Name #1] and his name is [Name #2]"

笔记:

如果同一匹配项出现多次,则此解决方案将其视为不同的“名称”。例如以下内容:

my_string = "My name is <N Timon N> and his name is <N Pumba N>, <N Timon N> again"


m = gregexpr("<N(.+?)N>", my_string, perl = TRUE)

match_indices = 1:length(unlist(m))

regmatches(my_string, m) = list(paste0("[Name #", match_indices, "]"))

输出:

> my_string
[1] "My name is [Name #1] and his name is [Name #2], [Name #3] again"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何替换字符串的所有匹配项?

替换字符串中的所有匹配项

R-如何从多个匹配项中替换字符串(在数据帧中)

如何使用字符串包替换R中匹配项中的特定组?

如何替换字符串中的第n个匹配项

Parsec如何在字符串中查找“匹配项”

如何找到与给定字符串匹配的字符串类型项(包含在子列表中)的所有索引?

每个匹配项的C#正则表达式更改替换字符串

用另一个列表中的字符串项匹配并替换列表中的字符串项

用字符串中的匹配记录替换给定字符串的所有匹配项

将正则表达式匹配项替换为包含匹配项的字符串

如何从C#中的字符串中提取多个子字符串匹配项?

Bash:如何获取字符串中匹配项的完整子字符串?

将字符串中的所有匹配项替换为哈希表中的值

如何替换匹配项(但不是每个匹配项)中的文本?

如何替换匹配项(但不是每个匹配项)中的文本?

如果模式是字符串字符,如何查找匹配项?

当存在多个匹配项时,PowerShell替换文件中的特定字符串

文件中单个匹配项的正则表达式字符串替换

Python匹配路径中的字符串并替换为先前的路径项

用字典中的第一个匹配项替换字符串

C#Regex.Replace-也在替换字符串中搜索匹配项

使用正则表达式替换字符串中的匹配项

PHP:提取数字并用函数替换字符串中的所有匹配项

用正则表达式替换匹配项中的子字符串

替换字符串中的第N个正则表达式匹配项

用JavaScript中的所有匹配项替换“标记”(字符串)

按列上的 ROW 索引并在字符串中查找部分匹配项

在字符串数组中查找下一个匹配项的索引和值