2
<CallInfo info: from '600000000', to '800000000', forwardedFrom '', display '', category '1', tollCategory '2',callingNumberRestricted false, custom '', receivingComplete true> -- (SUCCESS)

そのような行がたくさんある巨大なテキスト ファイルがあります。number を抽出できるように正規表現を構築する方法を教えてください'800000000'

from と to の電話番号は異なります。

私は常に番号が必要ですto

現在、空のスペースで行を分割してから、配列を反復処理していますが、これは非常に非効率的です。

4

4 に答える 4

1

まず、to-Numberの完全一致を取得する必要があります。

, to '[0-9]{9}',

その後、試合からグループを取得する必要があります。次のような名前の付いたグループを使用することをお勧めします。

, to '(?<toNumber>[0-9]{9})',

電話番号を取得するための実装は次のようになります。

string regex = ", to '(?<toNumber>[0-9]{9})',";
string text = "<CallInfo info: from '600000000', to '800000000', forwardedFrom '', display '', category '1', tollCategory '2',callingNumberRestricted false, custom '', receivingComplete true> -- (SUCCESS)";
string toNumber = string.Empty;

Match match = Regex.Match(text, regex);
if (match.Success)
{
    toNumber = match.Groups["toNumber"].Value;
}
于 2012-04-24T17:28:01.553 に答える
0

試してみてくださいto '(\d{9})。これは、テキストの後の9桁のシーケンスと一致しto '、結果を最初のキャプチャグループに保存します。

于 2012-04-24T16:41:31.557 に答える
0

これは機能します。ただし、入力がどのように変化するかはわかりません...

        string s = "<CallInfo info: from '600000000', to '800000000', forwardedFrom '', display '', category '1', tollCategory '2',callingNumberRestricted false, custom '', receivingComplete true> -- (SUCCESS)";

        Regex r = new Regex("^<CallInfo.* to '(\\d{9})'");
        var match = r.Match(s);
        var number = match.Groups[1];
于 2012-04-24T16:51:54.593 に答える
0

シンプルに見えます。ファイルから「サンプル」行を取得し、それを正規表現に変換し、実際のデータをマークして、関心のあるデータの種類を示す特殊文字に置き換えます。具体的には、「to」をキャプチャしたいと言います" 電話番号:

@"^<CallInfo info: from '\d{1,9}', to '(?<toNumber>\d{1,9})', forwardedFrom '.*?', display '.*?', category '.*?', tollCategory '.*?', callingNumberRestricted (?:true|false), custom '.*?', receivingComplete (?:true|false)> -- \(SUCCESS\)$"

Regex.Match() を使用してこのパターンに対してファイル全体を実行すると、次のコードで "to" 番号のリストを生成できます。

List<string> toNumbers = Regex.Match(contentsOfFile, pattern).Groups["toNumber"].ToList();

簡単な解析で数値を実際の数値に変換できます。

List<ulong> toNumbersAsLongs = toNumbers.Select(s=>ulong.Parse(s)).ToList();

このファイルの他のデータが必要な場合は、そのフィールドを括弧で囲み、?<captureName>規則に従って名前を付けます。

于 2012-04-24T17:00:12.783 に答える