いくつかの式を含むプレーン テキスト ファイル ( .txt
) があり、無効な式を次のように置き換えたい... ...0 としましょう。
無効な式とは、1+3^4^5
またはを含む式です10+3+4*5+2^5^6^7
。つまり、式に を含めるnumber^number^number^...
ことはできず、 のみを含めることができますnumber^number
。
これを行う最善の方法は正規表現を使用することだと理解していますが、これを正規表現で記述する方法がわかりません。
複数の累乗を検出する正規表現は
(\d+\^){2,}
({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
}