-1
4

2 に答える 2

1
于 2013-09-21T15:15:41.757 に答える
0

私の理解では、?! で終わる任意の文に一致させたいと考えています。「」内のテキストを無視しながら、省略記号「...」。また、単一の数字または大文字とそれに続く ?! で一致を終了したくない場合もあります。また ...

その場合、これは機能します:

([^„]*?(„[^“]+?“)*)+?(?<!\b[\dA-Z])([?!]|[.]{1,3})

コード例:

public static void Main()
{            
    string pattern = @"([^„]*?(„[^“]+?“)*)+?(?<!\b[\dA-Z])([?!]|[.]{1,3})";
    string input = "Šios sutarties sąlygos taikomos „Microsoft. Hotmail“, „Microsoft. SkyDrive“, „Microsoft“ abonementui.";            
    var matches = Regex.Matches( input, pattern );
    foreach( Match match in matches )
    {
        Console.WriteLine(match.Value.Trim());
    }
}   

出力:

Šios sutarties sąlygos taikomos „Microsoft. Hotmail」、「Microsoft. SkyDrive」、「Microsoft」の廃止。

入力用:1.The „Acme. Photo“ is good. Test string „Microsoft. Hotmail“... Some more text? Even more text! Final text.

出力:

1.「アクメ。写真「いいですね。

テスト文字列「Microsoft. ホットメール"...

もう少しテキスト?

さらにテキスト!

最終テキスト。

正規表現の説明:([^„]*?(„[^“]+?“)*)+?(?<!\b[\dA-Z])([?!]|[.]{1,3})

  • [^„]*?'„' 以外のものに一致します。*? 遅延一致 (非貪欲) を意味します。
  • ([„][^“]+?[“])*この一致の後に「」の 0 個以上のインスタンスが続きます</li>
  • +?これを 1 回以上遅延して一致させることを意味します (つまり、!,?,.,... の前のすべて)
  • (?<!\b[\dA-Z])は、1 桁の数字または大文字に対して否定後読みを行うことを意味します。基本、合わない?!。または ... 数字または大文字が前にある場合。
  • ([?!]|[.]{1,3})? と一致する前の一致に続くことを意味します。また !または 1 ~ 3 。(ドット/ピリオド)

通常はパフォーマンスのために (?>) を使用しますが、正規表現はシンプルに保つことにしました。このサイトはとても役に立ちます。

それが役立つことを願っています。

于 2013-09-22T12:11:27.037 に答える