.NET 正则表达式替换组内的字符

标签 .net regex replace

我正在使用正则表达式替换(在 .Net 应用程序中)从条形码创建项目 ID。这是我正在使用的正则表达式:

^(?<Bestellnr>\w{6})(?<Pos>\d{3})M(?<Menge>\d{5})P(?<Lfd>\d{3})$

替换字符串是(它有前导空格,但这在这里并不重要):

${Bestellnr}${Pos} ${Lfd}

一个示例输入是:

685774010M00555P002

上述替换的当前结果是:

685774010 002

但现在我的客户希望我从“Pos”和“Lfd”组中删除前导零,因此结果应更改为:

685774 10   2

编辑:请注意“lfd”组中的两个 零被两个 空格替换了!

我已经尝试了几个小时,但似乎无法正常工作。我能找到的最佳方法是为前导零创建额外的组,例如:

^(?<Bestellnr>\w{6})(?<PosNull>0*)(?<Pos>\d{1,})M(?<Menge>\d{5})P(?<LfdNull>0*)(?<Lfd>\d{1,})$

但我不知道如何用正确数量的空格替换“空组”。这可能吗? (直到现在我还认为没有什么是 Regex 做不到的;-)

有人能帮忙吗?

最佳答案

您可以使用 matchevaluator 将 0 替换为空格来实现!

Regex.Replace("685774010M00555P002",
@"^(?<Bestellnr>\w{6})(?<Pos>\d{3})M(?<Menge>\d{5})P(?<Lfd>\d{3})$",
m=>m.Groups["Bestellnr"].Value+""+
   Regex.Replace(m.Groups["Pos"].Value,"(?<=^0*)0"," ")+
   " "+
   Regex.Replace(m.Groups["Lfd"].Value,"(?<=^0*)0"," "));

关于.NET 正则表达式替换组内的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13722297/

相关文章:

replace - sed 用多次出现的单词替换单词分隔符

c# - 如何修改列表属性而不影响同类型的其他列表属性?

c# - 获取网页中所有 url 的列表

python - 匹配模式的正则表达式。一个跳过换行符和字符直到模式。二

javascript - RegExp 通配符不应覆盖

PHP Regex 匹配字符串中的单词,不包括一个特定单词

c# - 二进制模式比较快捷方式/C# 中最快的实现

c# - 以编程方式隐藏 PropertyGrid 中的属性

c# - native 可执行文件中的字符串表资源

Java url 域名解析与正则表达式