繁体   English   中英

正则表达式替换内替换

[英]Regex Replace Within Replacement

这只是出于好奇而提出的一个问题-我一直在看这个问题 ,我想知道您如何才能在一个Regex Replace中进行两个所需的替换。

因此,情况是我们有以下输入:

8.11.2012 16:15:10
21.11.2012 15:00:54
11.11.2012 0:24:24
8.11.2012 16:06:53
9.11.2012 0:49:37

并想要创建以下输出:

08_11_2012_16_15_10
21_11_2012_15_00_54
11_11_2012_00_24_24
08_11_2012_16_06_53
09_11_2012_00_49_37

换一种说法:

  1. 将字符串的时间/日期部分中的任何单个数字替换为“ 0”和单个字符。 发布的解决方案非常有用:将\\b(\\d)\\b替换为0$1
  2. 与“_”代替任何分隔这将是简单地更换[\\s\\:.]_

我的问题是在单个Regex中是否有任何方法可以同时进行两次替换,还是绝对有必要进行两次替换迭代?

那会是什么样子?

只是想在这里学习-谢谢!

同样,即使这个问题是针对Notepad ++的,我也使用.Net(C#/ VB)。

您需要将其作为2个单独的替换项来执行。

正则表达式替换表示找到此匹配项并用此值替换。 用它替换的内容可能包括对原始匹配的引用,尽管您可能会想出一个复杂的模式来匹配和替换这两种情况,但这只会使您的表达式更加复杂,并且不太可能实际起作用。

您需要进行2次替换。

问题在于,没有条件替换字符串,并且如果您希望显示“ 0”,则肯定需要将“ 0”作为替换字符串的一部分。

如果只有一个替换,即“ _”(而不是“ 0”或“ _”或两个),结果是:“ _ 8_16_45__0_16_43”,那么将有一种方法可以实现:

我的2美分。

在C#中,您可以使用委托在一次迭代中做到这一点:

String result = Regex.Replace(input, @"(\d{1,2})\.(\d{1,2}).(\d{4}) (\d{1,2}):(\d{1,2}):(\d{1,2})",
    delegate(Match match)
    {
        string[] array = { match.Groups[1].Value.PadLeft(2, '0'), match.Groups[2].Value.PadLeft(2, '0'), match.Groups[3].Value.PadLeft(2, '0'), match.Groups[4].Value.PadLeft(2, '0'), match.Groups[5].Value.PadLeft(2, '0'), match.Groups[6].Value.PadLeft(2, '0')};
        return String.Join("_", array);
    });

要允许使用不同的分隔符,请使用[\\s\\:.]代替\\.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM