3

我有纯文本文件 ( .txt),其中包含一些表达式,我想用...替换无效的表达式 ...假设为零。

无效的表达式是包含1+3^4^5or10+3+4*5+2^5^6^7的表达式,即表达式不能包含number^number^number^...,它只能包含number^number

我知道最好的方法是使用正则表达式,但我不知道如何在正则表达式中编写它。

4

2 回答 2

7

检测多个幂的正则表达式是

(\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,}.* 

在您的替换表达式中。当.*更换发生时,任一侧将吞噬双电源周围的整个字符串。

于 2012-04-10T18:36:40.487 回答
2

这是一个正则表达式:

Regex re = new Regex(@"(\d+\^){2}");

...

if(re.IsMatch(myData)) {
    // It's not valid
}
于 2012-04-10T18:36:58.487 回答