正则表达式替换 - 使用 R 的 Sub 将字符串附加到第二次出现
Regexp Replace - Append String to Second Occurrence Using R's Sub
我正在尝试将字符串附加到第二次出现的位置。下面的代码将用静态替换字符串替换第二次出现,但我需要它是灵活的,因为匹配可以是,例如,(cat|dog)
。下面是我用来替换静态字符串 fish
.
的内容
string <- "xxx cat xxx cat xxx cat"
sub('^((.*?cat.*?){1})cat', "\1\fish", string, perl=TRUE)
[1]'xxx cat xxx fish xxx cat'
但我想得到的是:
string <- "xxx cat xxx cat xxx cat"
sub('^((.*?(cat|dog).*?){1})(cat|dog)', "\1<span>\1</span>", string, perl=TRUE)
[1] xxx cat xxx <span>cat</span> xxx cat
或
string <- "xxx dog xxx dog xxx dog"
sub('^((.*?(cat|dog).*?){1})(cat|dog)', "\1<span>\1</span>", string,
[1] xxx dog xxx <span>dog</span> xxx dog
这可能不是最有效或最简洁的正则表达式,但我发现这样更容易理解:
sub('^(.*?)(cat|dog)(.*?)(cat|dog)', '\1\2\3<span>\4</span>', string, perl=TRUE)
不需要正则表达式中的 {1}
。使用您的语法(嵌套捕获组)但没有 {1}
,您可以使用以下内容:
sub('^(.*?(cat|dog).*?)(cat|dog)', '\1<span>\3</span>', string, perl=TRUE)
请注意,这些正则表达式不会检查两次是否匹配同一个词(汽车或狗)。
我正在尝试将字符串附加到第二次出现的位置。下面的代码将用静态替换字符串替换第二次出现,但我需要它是灵活的,因为匹配可以是,例如,(cat|dog)
。下面是我用来替换静态字符串 fish
.
string <- "xxx cat xxx cat xxx cat"
sub('^((.*?cat.*?){1})cat', "\1\fish", string, perl=TRUE)
[1]'xxx cat xxx fish xxx cat'
但我想得到的是:
string <- "xxx cat xxx cat xxx cat"
sub('^((.*?(cat|dog).*?){1})(cat|dog)', "\1<span>\1</span>", string, perl=TRUE)
[1] xxx cat xxx <span>cat</span> xxx cat
或
string <- "xxx dog xxx dog xxx dog"
sub('^((.*?(cat|dog).*?){1})(cat|dog)', "\1<span>\1</span>", string,
[1] xxx dog xxx <span>dog</span> xxx dog
这可能不是最有效或最简洁的正则表达式,但我发现这样更容易理解:
sub('^(.*?)(cat|dog)(.*?)(cat|dog)', '\1\2\3<span>\4</span>', string, perl=TRUE)
不需要正则表达式中的 {1}
。使用您的语法(嵌套捕获组)但没有 {1}
,您可以使用以下内容:
sub('^(.*?(cat|dog).*?)(cat|dog)', '\1<span>\3</span>', string, perl=TRUE)
请注意,这些正则表达式不会检查两次是否匹配同一个词(汽车或狗)。