c# - 正则表达式:用新字符串替换匹配的标记/子字符串的子字符串
问题描述
我需要检查字符串中的以下匹配项:
"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:
正则表达式替换代码如何?
为什么在https://regex101.com/r/vIZCGW/2的演示中,有些行在行尾后以浅蓝色突出显示,而其他行则没有?
谢谢!
解决方案
关于正则表达式替换代码,您可以从.NET 文档 https://docs.microsoft.com/en-us/dotnet/standard/base-types/substitutions-in-regular中找到有关如何在本文中完成的更多信息-表达式。
使用您提供的正则表达式,我会写如下内容:
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;
}
});
这段代码的作用是检查第二组正则表达式捕获的内容,并将其替换为相应的值。
关于您的第二个问题,以蓝色突出显示的行实际上是从您的正则表达式的第一组中捕获的行。
推荐阅读
- debugging - 如何找到 Firefox 的日志?
- c# - 如何在调试模式 (F5) 下运行/测试应用程序并在应用程序运行期间仍然显示输出窗口 (VS Express 2015)
- php - 在 HTML 上显示 MySQL SELECT 结果
- php - 我可以通过提供未暗示的参数来逃避依赖倒置原则吗?
- spring-boot - 有没有办法使用 Spring Boot 为队列动态设置 prefetchSize?
- segmentation-fault - 如何在 VHDL-2008 中使用带有通用列表的程序?
- algorithm - 这个图形缩减操作是否已经存在?
- java - 在 Heroku 上部署文件夹并运行 .jar
- javascript - 获取集合 mongoose 中所有文档的长度
- python - xarray:将ufunc应用于基于dask的数据集的月+日组