正则表达式以匹配某些公式

时间:2018-11-01 02:26:08

标签: c# regex

我是新来的正则表达式。我想知道如何使用正则表达式替换

001-34/323
To 
001/34-323

我有这样的东西

 return Regex.Replace(input, 
               "\\b(?<p1>\\d{1,2})/(?<p2>\\d{1,2})/(?<p6>\\d{2,4})\\b",
               "${p1}-${p2}-${p3}", RegexOptions.None.

我有这样的东西,但它不起作用,它与我想要的相反

输入具有所有整数。请让我知道将输入更改为输出的正则表达式 谢谢

2 个答案:

答案 0 :(得分:2)

您当前的正则表达式期望这样的数字:

P1/P2/P3

位置:

  • P1是1-2位数字
  • P2是1-2位数字
  • P3是2-4位数字

为什么不起作用?您的输入字符串为001-34/323P1-P2/P3),P1为3位数字。此外,您的最后一个捕获组称为<p6>,而不是<p3>

正确的字符串应为:

\b(?<p1>\d{1,3})-(?<p2>\d{1,2})/(?<p3>\d{2,4})\b

或以转义形式:

"\\b(?<p1>\\d{1,3})-(?<p2>\\d{1,2})/(?<p3>\\d{2,4})\\b",

您用于输出的模板也是错误的(P1-P2-P3,而不是P1/P2-P3)。

最终代码示例:

var input = "001-34/323";
var output = Regex.Replace(input, 
                   "\\b(?<p1>\\d{1,3})-(?<p2>\\d{1,2})/(?<p3>\\d{2,4})\\b",
                   "${p1}/${p2}-${p3}",
                   RegexOptions.None);
Console.WriteLine(output);

Try it online

答案 1 :(得分:0)

为什么要通过尝试匹配数据模式来增加难度?

如果您只是用斜杠替换破折号,请使用匹配评估器在找到破折号或斜杠时返回相反的内容。

var text = "001-34/323";

Regex.Replace(text, "[-/]", me => { return me.Value == "-" ? "/" : "-";   })

结果

001/34-323