正则表达式 - 4位数字匹配和替换

时间:2012-01-01 14:30:47

标签: regex

我希望匹配并替换csv文件中的四位数字

1,1456,2,3,4,5
2,1455,2,3,4,5

以便第二列中的所有1400个数字都映射到200的范围

1456 -> 256
1455 -> 255

我有这个正则表达式来匹配1400个数字

',[1][4][0-9][0-9],'

但是如何定义匹配的子字符串正则表达式以保留匹配的最后两位数?

修改

结束将匹配正则表达式更改为

,[1][4]([0-9][0-9])

并将匹配定义为

,2\1

在Notepad ++中

4 个答案:

答案 0 :(得分:3)

/14(\d{2})/替换为2\1,其中\1是对第一场比赛的反向引用。适应您的正则表达风格。

答案 1 :(得分:1)

sed -e 's/,[1][4]\([0-9][0-9]\),/,2\1,/'

注意\(\)语法如何捕获匹配表达式的一部分,而\ 1用于表示“第一个捕获的数据”。

答案 2 :(得分:1)

您需要使用backreference - 在括号中包含正则表达式的一个或多个部分,稍后可以在输出中引用它们。这是我的最终版本(适用于sed -r)。

's/,[1][4]([0-9][0-9])/,2\1/'

答案 3 :(得分:0)

您应该使用一个组,例如

',[1][4]([0-9][0-9]),'

一些正则表达式方言会让你命名组,例如在.NET中

',[1][4](?<LastTwoDigits>[0-9][0-9]),'

如果您指定使用的是哪种语言,则可以更轻松地为您提供帮助。