【问题标题】:regex - 4 digit number match and replace正则表达式 - 4 位数字匹配和替换
【发布时间】:2012-01-31 09:20:25
【问题描述】:

我想匹配和替换 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

在记事本++中

【问题讨论】:

    标签: regex


    【解决方案1】:

    /14(\d{2})/ 替换为2\1,其中\1 是对第一个匹配项的反向引用。适应您选择的正则表达式风格。

    【讨论】:

      【解决方案2】:
      sed -e 's/,[1][4]\([0-9][0-9]\),/,2\1,/'
      

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          你应该使用一个组,例如

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

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

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

          如果您指定您使用的语言,它会更容易为您提供帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-11-30
            • 1970-01-01
            • 2022-01-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-16
            • 1970-01-01
            相关资源
            最近更新 更多