正则表达式匹配R中具有相同数字的模式

时间:2016-06-29 18:53:26

标签: regex r

我有一组字符串,如下所示。每个字符串有3个数字,用下划线(_)分隔。每个数字都是1到100之间的值。

  

ma_1_1_1

     

ma_2_100_59

     

ma_29_29_29

     

ma_100_100_100

     

ma_7_72_78

     

ma_10_10_100

     

ma_4_4_49

我想写一个正则表达式,我可以得到数字相同的字符串。例如,我的输出将是

  

ma_1_1_1,ma_29_29_29和ma_100_100_100

3 个答案:

答案 0 :(得分:5)

喜欢这个吗?

^ma_(\d+)_\1_\1$

请参阅a demo on regex101.com 这使用了与第一个捕获的组以及锚点的反向引用。

答案 1 :(得分:3)

使用反向引用使正则表达式再次匹配前一个组:

ma_(100|[1-9][0-9]?)_\1_\1\b

Regex101 Demo

这也将验证数字是否在范围内。如果不需要此验证,请使用(\d+)作为捕获组。

答案 2 :(得分:0)

这个答案是对@ 4castle的修改,它只会提取具有相似数字的字符串。

grep("ma_(100|[0-9][0-9]|[0-9])(_\\1)(_\\1)\\b", stringList, value = T)