匹配gsub中的一组数字,但以“ /”符号开头时则排除一组相同的数字

康拉德

问题

我正在使用类似于下面创建vecA的矢量

vecA <- c("data2002", "valueA2002", "value2005", "indicator2008/2009",
          "something2011/12", "abc2011/14")

我想使用以下格式的vecB

vecA <- c("data_2002", "valueA_2002", "value_2005", "indicator_2008/2009",
          "something_2011/12", "abc_2011/14")

总之,_时间序列标识符之前有一个下划线,但是奇怪的是可以构造后者。时间序列标识符的唯一共同特征是它以20开头。没有其他共同特征,时间序列标识符可能是:

  • 2000Q1,
  • 2009 / 2011Q3

采取的方法

我想使用regex20匹配模式,而在后面使用负向外观则可以避免匹配20两次。因此,例如在字符串中:

  • indicator2002 / 2003我只想匹配第一组数字,所以我可以得到:
  • 指标_ 2002/2003

代码

我将从以下内容开始:

gsub(pattern = "20", replacement = "_20",x = names(x))

但这将匹配所有20的实例所以我的想法是利用正则表达式的行前/后行功能,在此行20(?<!\\2)中我可以排除比赛中的某些内容。

阿克伦

我们匹配一个或多个非数字元素(\\D+),将其捕获为组((..)),然后捕获数字正则表达式超前((?=\\d)),并替换为反向引用(\\1,再捕获_

sub('(\\D+)(?=\\d)', '\\1_', vecA, perl=TRUE)
#[1] "data_2002"           "valueA_2002"         "value_2005"          "indicator_2008/2009" "something_2011/12"   "abc_2011/14"      

或者没有环顾四周,我们使用两个捕获组。我们前面提到的第一个捕获组,然后是第二个捕获组,该捕获组以数字开头,然后是一个或多个字符。在替换中,我们使用以分隔的两个反向引用_

sub('(\\D+)(\\d.*)', '\\1_\\2', vecA)

如果需要更具体,即仅匹配以开头的数字 20

sub('(\\D+)(20.*)', '\\1_\\2', vecA)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sed:在一个单词前匹配一组数字

来自分类Dev

一组模式匹配

来自分类Dev

获取一组给定数字中具有相同数字频率的组的数量

来自分类Dev

使用Python中的一组数字创建“切片符号”样式列表

来自分类Dev

将数字减少为一组静态数字

来自分类Dev

检查数字是否在一组指定的数字之间?

来自分类Dev

在python中,如何使一组变量全部等于相同的数字?

来自分类Dev

R查找以一组数字字符开头的行

来自分类Dev

在C ++中添加一组数字

来自分类Dev

在R中循环一组生成数字的命令

来自分类Dev

过滤列中一组给定数字中可用的数字

来自分类Dev

在mysql中存储一组数字

来自分类Dev

检查在一组数字中,数字n是否等于其子集的总和

来自分类Dev

一组数字里面的PHP唯一rand()

来自分类Dev

一组数字的平均值

来自分类Dev

如何替换数字列表中的单个数字(从一组行)?

来自分类Dev

从div中的一组数字中找出最高的数字

来自分类Dev

用Java存储一组数字

来自分类Dev

如何从主列中排除一组数字

来自分类Dev

如何在Excel中递增同一组数字

来自分类Dev

在div内居中的一组数字

来自分类Dev

根据另一列中的一组相等数字在表(i ++)中插入数字

来自分类Dev

为什么`a` 和`b` 不使用R 中的`mapply` 生成相同的一组数字?

来自分类Dev

RegEx - 匹配第一组四位数字......除非

来自分类Dev

使用一组数字相加为特定数字

来自分类Dev

正则表达式只匹配一组数字

来自分类Dev

CASE WHEN IN ({一组数字})

来自分类Dev

解析一组数字范围

来自分类Dev

从python中的一组链接中提取数字