1

個々の単語を分割するために必要なテキストファイルをいくつか用意します。しかし、言葉の非常に自由な定義で。

\b境界を正しく識別しているように見えますが、幅がゼロであるため、^\bは何もしません。

.NET string.parseの方が速いかもしれませんが、一致位置も必要です。

私が最終的に得たものを以下に示します。^をゼロ以外で使用すると、中断したかったのです。休憩を無視したい日付、メールアドレス、URLを追加しました。

私は、解決策が私の元の問題ステートメントにあまり近くないことを知っています。それは進化しました。よろしくお願いします。

    String line;
pattern = @"\w+@\w+|[01]?\d\/[0123]?\d\/([12]\d)?\d\d|https?:\/\/(?:\w+\.){1,3}\w+|[^\s\.\\///?!()@,]{2,200}";
    while ((line = sr.ReadLine()) != null)
    {
        Debug.WriteLine(line);
        foreach (Match match in Regex.Matches(line, pattern, RegexOptions.IgnoreCase))
        {
            Debug.WriteLine(match.Index.ToString() + " " + match.Value);
        }
        break;
    }
4

5 に答える 5

1

\w文字、数字、および_(アンダースコア)に一致します。 文字と(単語以外の文字、 )の\b間の境界に一致します。 境界(常にゼロ幅)なので、無意味です。\w\W[^\w]\B\B+

編集: 私はまだあなたが言葉を分割したい場所を正確に理解するのに苦労しています。

.(ピリオド)と空白以外のものを一致させたい場合は、次の除外方法を試してください。

[^.\s]+

特定の文字を含める場合は、次の包含方法を試してください。

[-\w`~!@#$%^&*\[\]()\\\/]+
于 2012-05-30T19:23:50.310 に答える
1

単語境界ではなく、\B同じ同類の隣接するアイテムを参照します。

同じ同類のエンドキャラクターを除外する\b(\w+|\W+)\bので、あなたは欲しがっているように見えます。((?:\B.\B)+)

編集:

更新しますか。

You could split with this [^\p{L}] *\p{Z} [^\p{L}]* or use  

(dosen't account for graphines) 
[\s\pP]* ([\pL\pN_-] (?: [\pL\pN_-] | \pP(?=[\pL\pN\pP_-]) )* )
  or
[\s[:punct:]]* (\w (?: \w | [[:punct:]](?=[\w[:punct:]]) )* )  

両方の収量

'hello'
'world'
'MSCFX'
'package.propertiescu3u'
'bin\exet[p"R4~fd'
'Would'
'like'
'MSCFX'
'package'
'propertiescu3u'
'bin'
'centra'
'exet[p"R4~fd'
于 2012-05-30T19:50:53.887 に答える
1

あなたの例のように、スペース、バックスラッシュ、ピリオドで文字列を分割してみませんか?

// C#
string str = "MSCFX package.propertiescu3u bin\\exet[p\"R`4~fd"; // note the necessary escapes for \ and " 
var words = Regex.Split(str,@"[ \.\\]"); // split on spaces, periods, and backslashes
于 2012-05-30T20:14:48.117 に答える
1

あなたは何をするのかを正確に理解する必要があり\bます。正規表現は読み取れないことに注意してください。「単語境界」の「単語」は、1つ以上の文字、数字、またはアンダースコアとして任意に定義されます。あなたの定義が違うなら、\b役に立たない。

それで、あなたは正確に単語を何と思いますか?更新された質問を見ると、まだ使用可能なパターンが見つかりません。空白とピリオドで分割したいだけですか?

pattern = @"(?<=^|[\s.])[^\s.]+(?=[\s.]|$)";

テスト文字列に適用:

MSCFX package.propertiescu3u bin\exet[p"R`4~fd

...一致します:

MSCFX
package
propertiescu3u
bin\exet[p"R`4~fd
于 2012-05-30T20:16:43.957 に答える
1

RegexHeroによると

([^\\b]*)

無視MSCFX package.propertiescu3u bin\exet[p"R``4~fdケース、単一行を使用して動作します。

ここに画像の説明を入力してください

于 2012-05-30T20:21:30.380 に答える