我希望匹配并替换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 ++中
答案 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]),'
如果您指定使用的是哪种语言,则可以更轻松地为您提供帮助。