18

C#プログラムに正規表現が必要です。


特定の構造を持つファイルの名前をキャプチャする必要があります。

charクラスを使用しました\wが、問題は、このクラスがアクセント付きのcharと一致しないことです。

では、これを行う方法は?理論的にはすべての文字にすべてのアクセントを付けることができるので、最もよく使用されるアクセント付きの文字をパターンに入れたくありません。

したがって、構文はあるかもしれませんが、大文字と小文字を区別しない(またはアクセントを考慮したクラス)か、大文字と小文字を区別できない正規表現オプションが必要です

このようなことを知っていますか?

どうもありがとうございます

4

7 に答える 7

14

分音符号をアルファベットの(ほぼ)同等のものに置き換えるだけで、現在の正規表現を使用できます。

例を参照してください。

.NET で文字列から分音記号 (アクセント) を削除するにはどうすればよいですか?

static string RemoveDiacritics(string input)
{
    string normalized = input.Normalize(NormalizationForm.FormD);
    var builder = new StringBuilder();

    foreach (char ch in normalized)
    {
        if (CharUnicodeInfo.GetUnicodeCategory(ch) != UnicodeCategory.NonSpacingMark)
        {
            builder.Append(ch);
        }
    }

    return builder.ToString().Normalize(NormalizationForm.FormC);
}

string s1 = "Renato Núñez David DeJesús Edwin Encarnación";
string s2 = RemoveDiacritics(s1);
// s2 = "Renato Nunez David DeJesus Edwin Encarnacion"
于 2011-07-12T13:38:39.213 に答える
12

この例では、大文字と小文字を区別しません。

     string input =@"âãäåæçèéêëìíîïðñòóôõøùúûüýþÿı";
     string pattern = @"\w+";
     MatchCollection matches = Regex.Matches (input, pattern, RegexOptions.IgnoreCase);
于 2011-07-12T13:20:54.873 に答える
6

\p{L}クラスの代わりにこれを使用してください\w

\p{L}カテゴリ「文字」のユニコードコードポイントです。したがって、たとえば「äöüéè」などが含まれます。

たとえば、このようなスペースやドットを含める場合は、独自の文字クラスで使用することもできます。[\p{L} .]

アップデート:

\wOK、 .netにはASCII文字だけでなくUnicode文字も含まれていることを認識しました。

だから私はあなたが何を求めているのかわかりません。文字のように見えるがそうではないものを許可したい場合は、\S(空白ではなく)使用することになります。

いくつかの例を示すと役立つかもしれません。

于 2011-07-12T13:37:04.473 に答える
4

これを試して:

 String pattern = @"[\p{L}\w]+"; 
于 2011-07-12T13:18:47.140 に答える
2

これを試して、動作するかどうかを確認できますか:

[\u00E9-\u00F8\w]
于 2011-07-12T13:21:28.280 に答える
0

これで私を撃ち落とさないでください。ただし、ファイル名を一致させようとしているだけなら、別の方法で除外文字を使用してみませんか?

 [^<>:"/\|?*]
于 2011-07-12T13:16:06.030 に答える
-2

試しましたか 。改行文字を除く任意の 1 文字に一致します。\w: アンダースコアを含む任意の単語文字に一致します。「[A-Za-z0-9_]」に相当。したがって、アクセント付きの文字が除外されるのは理にかなっています。

http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet

于 2011-07-12T13:18:52.740 に答える