RegEx:用新的字符串替换匹配的令牌/子字符串的子字符串

问题描述 投票:-1回答:1

我需要检查字符串中的以下匹配项:

"SIN ", " SIN", " SIN ", "SX ", " SX", " SX ", "RIC ", " RIC", " RIC ", "OK ", " OK", " OK "

但是替换,当这些标记匹配时,只有子字符串

"SIN", "SX", "RIC", "OK"

[加上其他文字,保留空格。

每行都必须视为不同的输入字符串。

详细,我需要:

  • 每次匹配其中一个时,将标记"SINSC"中的子字符串"SIN""SX"替换为"SIN ", " SIN", " SIN ", "SX ", " SX", " SX "

  • 每次匹配其中一个时,用标记"RICOM"替换子字符串"RIC"中的子字符串"RIC ", " RIC", " RIC "

  • "OK ", " OK", " OK "的匹配用于其他目的,而不是替换,我以后需要在代码中使用它们]]] >>

    我为第一次过滤写了以下表达式:

(^|\s+)(SIN|SX|RIC|OK)(\s+|$)

似乎可行(我已经考虑了前后多个空格的情况)。我已经在以下文本中尝试过:

(您可以在https://regex101.com/r/vIZCGW/2上看到演示,]

16M2 - SIN - 49.000 KM - SENS - A/C - n.d. - FROM:   - MATRIC.: n.d. - GEAR: n.d. - COD.PROD.RIC.: n.d. - NR.PLATE: 
14I2 - OK - 20.000 KM - A/C - n.d. - FROM: - MATRIC.: n.d. - GEAR: n.d. - COD.PROD.RIC.: n.d. - NR.PLATE: 
11A0 - SIN - 55.000 KM - SQUARE - SENS - A/C
16H0 - n.d. - n.d. - FROM:   - MATRIC.: n.d. - GEAR: n.d._n.d. marce - COD.PROD.RIC.: n.d. - NR.PLATE: 
14N1 - SIN - n.d. - FROM:   - MATRIC.: n.d. - GEAR: n.d._n.d. marce - COD.PROD.RIC.: n.d. - NR.PLATE:  - STEEL
16D2 - SIN - n.d. - FROM:   - MATRIC.: n.d. - GEAR: n.d._n.d. marce - COD.PROD.RIC.: n.d. - NR.PLATE: 
SX 100000 KM        15K2
SIN - 15D1
16P0 - OK - n.d. - FROM:   - MATRIC.: n.d. - GEAR: n.d._n.d. marce - COD.PROD.RIC.: n.d. - NR.PLATE: 
16H0 - SIN - n.d. - FROM:   - MATRIC.: n.d. - GEAR: n.d._n.d. marce - COD.PROD.RIC.: n.d. - NR.PLATE: 
16I1    SIN
14K1 - SIN - n.d. - FROM:   - MATRIC.: n.d. - GEAR: n.d._n.d. marce - COD.PROD.RIC.: n.d. - NR.PLATE: 
SX    14E2
SX     16D1 NO TURBO
SX 110000 KM          15M1
16O2 - SIN 
15J1 - SIN
16L1   SIN DAMAGED
16P2 - SIN - DAMAGED
SX          15E2
SX        9D2
SIN - 130.000 KM - 16J1
OK          13A0
SX        16M0
OK        11A1
OK        12V1
SX 105CV        15P1
OK 105CV        15O2
14A2 - SIN

我的问题基本上是2:

  1. 正则表达式的替换代码如何?

  • 为什么在https://regex101.com/r/vIZCGW/2的演示中,某些行在行尾之后用浅蓝色突出显示,而另一些不是?]]

  • 谢谢!

    我需要检查字符串中的以下匹配项:“ SIN”,“ SIN”,“ SIN”,“ SX”,“ SX”,“ SX”,“ RIC”,“ RIC”,“ RIC”,“ OK”,“ OK”,“ OK”,但是替换,当这些标记匹配时,仅...

    关于正则表达式替换代码,您可以从。NET文档

    https://docs.microsoft.com/en-us/dotnet/standard/base-types/substitutions-in-regular-expressions中找到有关如何完成此操作的更多信息。

    使用正则表达式,我会写这样的东西:

    Regex regex = new Regex(@"(^|\s+)(SIN|SX|RIC|OK)(\s+|$)");
    
    string result = regex.Replace(input, m =>
    {
        switch (m.Groups[2].Value)
        {
            case "SX":
            case "SIN":
                return "SINSC";
            case "RIC":
                return "RICOM";
            default:
                return m.Value;
        }
    });
    

    此代码的作用是检查第二组正则表达式捕获的内容,并将其替换为相应的值。

    关于第二个问题,蓝色突出显示的行实际上是从正则表达式的第一组捕获的行。

    c# regex regular-language regex101
    1个回答
    0
    投票

    关于正则表达式替换代码,您可以从。NET文档

    © www.soinside.com 2019 - 2024. All rights reserved.