gpt4 book ai didi

R中的正则表达式,在替换中重用匹配的字符串

转载 作者:行者123 更新时间:2023-12-04 03:52:44 25 4
gpt4 key购买 nike

我想使用正则表达式在个位数月份(例如 2020M6 到 2020M06)之前插入一个 '0'。下面的那个正确地匹配了我需要替换的字符串(字符串末尾跟在 'M' 之后的一个数字,不包括 'M'),但是替换模式 '0$0' 在 R 中按字面解释;在其他地方(matlab 中的 regeprep),我在示例中通过 '$0' 引用了匹配的字符串 '6'

sub('(?<=M)([0-9]{1})$','0$0', c('2020M6','2020M10'), perl = T)
[1] "2020M0$0" "2020M10"

我找不到如何在替换模式中引用和重用匹配的字符串。

PS:有其他方法可以完成任务,但我需要使用正则表达式。

最佳答案

不幸的是,不可能在基本 R 正则表达式函数中使用对整个匹配的反向引用。

你可以使用

sub("(M)([0-9])$", "\\10\\2", x)

使用像这里这样的 TRE 正则表达式,您不必担心反向引用后的数字,因为在 TRE 正则表达式中只允许从 19 的 9 个反向引用模式。有趣的是,您可以在上面的代码行中使用 perl=TRUE,它会产生相同的结果。

参见 R demo online :

x <-  c('2020M6','2020M10')
sub("(M)([0-9])$", "\\10\\2", x)
## => [1] "2020M06" "2020M10"

另请参阅 regex demo .

关于R中的正则表达式,在替换中重用匹配的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64223324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com