我是新来的正则表达式。我想知道如何使用正则表达式替换
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.
我有这样的东西,但它不起作用,它与我想要的相反
输入具有所有整数。请让我知道将输入更改为输出的正则表达式 谢谢
答案 0 :(得分:2)
您当前的正则表达式期望这样的数字:
P1/P2/P3
位置:
为什么不起作用?您的输入字符串为001-34/323
(P1-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);
答案 1 :(得分:0)
为什么要通过尝试匹配数据模式来增加难度?
如果您只是用斜杠替换破折号,请使用匹配评估器在找到破折号或斜杠时返回相反的内容。
var text = "001-34/323";
Regex.Replace(text, "[-/]", me => { return me.Value == "-" ? "/" : "-"; })
结果
001/34-323