3

正規表現を使用して文字列が正しいかどうかをチェックしていました(文字、、、、、、、、、、、A-Zを許可したい)。私のコードは次のようなものです:a-z*space-&%./+

Regex r = new Regex("^[A-Z0-9.$/+%\\- ]+$");
string myString = "ABCDEFGH 12345 $%...     A"; //string ok

if (r.IsMatch(myString))
  System.Console.WriteLine("String alright!");

これは機能しており、すべてが正常です。今、私はちょうど考えました、多分私は正しくない文字列も扱うことができるでしょう。文字列内の正しくない(正規表現が無効な)文字を。に置き換えたいと思います-。それはで行うことができますRegex.Replace。だから私はこれを作りました:

Regex r = new Regex("^[A-Z0-9.$/+%\\- ]+$");
string myString = "HELLO WÖRLD ß~# 50.00$"; //Ö,ß,~,# should be replaced by -

if (r.IsMatch(myString))
  System.Console.WriteLine("String alright!");
else
  myString = Regex.Replace(myString, r.ToString(), "-");

System.Console.WriteLine(myString);

まあ、これはとても機能していません!出力として私は得る:

HELLO WÖRLD ß~# 50.00$

私は何が欠けていますか?問題は正規表現ですよね?文字列が正しいかどうかは確認できますが、この正規表現でRegex.Replace関数を正しく使用できません。文字列が有効であり、使用できるかどうかを確認するために1つの正規表現を使用する方法はありますRegex.Replaceか?

4

3 に答える 3

4

検証式の文字と一致しない文字を(一致させて)置換する場合は、それらの文字と具体的に一致する別の式が必要です。例えば:

[^A-Z0-9.$/+%\- ]

これは次のように使用できます:

myString = Regex.Replace(myString, @"[^A-Z0-9.$/+%\- ]", "-");
于 2013-03-10T16:34:08.310 に答える
3

あなたのコードは実際には意味がありません。
falseが返された場合r.IsMatch()、正規表現が文字列と一致しないことがわかっているため、一致を置き換えても効果はありません。(一致するものはありません)

代わりに、無効な文字と一致する正規表現を作成し、一致しないかどうかを確認し、一致する場合はを呼び出す必要があります.Replace()


また、正規表現を誤用しています。

インスタンスがある場合は、そのインスタンスメソッドRegexを呼び出す必要があります。Replace

myString = r.Replace(myString, "-");
于 2013-03-10T16:32:33.720 に答える
0

正規表現が置換するものを見つけられないため、置換は発生していません。

同じ正規表現を使用するためにできることは、「myString」を文字に変換し、各文字の有効性を確認することです。

例(Javaからですが、理解しやすいはずです):

if (r.IsMatch(myString)){
            System.Console.WriteLine("String alright!");
}  else {

    // java iteration
    for(int i = 0; i < myString.length(); i++){
        Character c = myString.charAt(i);
        if(!c.toString().matches(reg)){
            myString = myString.replace(c.toString(), "-");
        }
    }

}
于 2013-03-10T17:03:34.740 に答える