我有纯文本文件 ( .txt
),其中包含一些表达式,我想用...替换无效的表达式 ...假设为零。
无效的表达式是包含1+3^4^5
or10+3+4*5+2^5^6^7
的表达式,即表达式不能包含number^number^number^...
,它只能包含number^number
。
我知道最好的方法是使用正则表达式,但我不知道如何在正则表达式中编写它。
检测多个幂的正则表达式是
(\d+\^){2,}
({2,}
表示连续两次或多次)
刚刚运行了以下测试:
using System;
using System.Text.RegularExpressions;
namespace SampleNamespace
{
public class SampleClass
{
public static void Main()
{
string line = "1+3^4^5 10+3+4*5+2^5^6^7";
System.Console.WriteLine(line);
line = Regex.Replace(line, @"(\d+\^){2,}", "0");
System.Console.WriteLine(line);
}
}
}
输出是:
>RegexTest.exe
1+3^4^5 10+3+4*5+2^5^6^7
1+05 10+3+4*5+07
它未能替换尾随 \d 但它确实有效。您可以通过对正则表达式进行以下更正来获取尾随 \d:
(\d+\^){2,}\d+
如果你想清除包含双重幂的整个表达式,只需使用
.*(\d+\^){2,}.*
在您的替换表达式中。当.*
更换发生时,任一侧将吞噬双电源周围的整个字符串。
这是一个正则表达式:
Regex re = new Regex(@"(\d+\^){2}");
...
if(re.IsMatch(myData)) {
// It's not valid
}