2016-09-26 19 views
0

C#で作成されたDataminingプロジェクトを引き継ぎ、有用なデータをデータベースに格納するためにいくつかの生のテキストファイルを解析しています。文字列と一致しない、奇妙な正規表現の構文

今のところ問題はありませんが、すべての機能が動作していますが、正規表現の構文に誤解があります。

は実際には、なぜ

Déposé et enregistré le 16/09/2016は、私は正規表現は私の文字列に一致するようにDéposé et enregistré le ([0-9]{2}\/[0-9]{2}\/[0-9]{4})のようになることが予想文字列のマッチング表現Déposé et enregistré le (?<Registred>.+?)\s*(\r\n)

です。

私が迷子になる問題は、私の意見では16/09/2016のように一致してはならない(?<Registred>.+?)部分です。ここで

は、文字列に一致するコードのサンプルです:

var results = new List<RegexResult>(); 
String regexS = r.RegexValue; 

try 
{ 
    var regex = new System.Text.RegularExpressions.Regex(regexS, RegexOptions.None, new TimeSpan(TimeSpan.TicksPerSecond * 3)); 
    var matchCollection = regex.Matches(data.Data); 

    if (matchCollection.Count > 0) 
    { 
     int occurenceCounter = 0; 
     foreach (Match match in matchCollection) 
     { 
      string[] capturedGroup = regex.GetGroupNames(); 
      foreach (string groupName in capturedGroup) 
      { 
       string resultValue = match.Groups[groupName].Value.Trim(); 
       if (groupName != "0") 
       { 
        results.Add(new RegexResult(data.Id, r, resultValue, groupName, occurenceCounter)); 
       } 
       log.Info("RawData Id : {0} | Regex Id : {1} | groupName {2} : {3}", data.Id, r.Id, groupName, resultValue); 
      } 
      occurenceCounter++; 
     } 
    } 
} 
catch (RegexMatchTimeoutException e) 
{ 
    log.Error("RegexMatchTimeoutException for Id {0} and regex {1}", data, regexS, e); 
}    

return results; 

任意のアイデア?

+0

実際には、 '\ r \ n 'のために日付の後に改行がある場合にのみ一致します。このドットは改行以外の任意のcharにマッチします。 '+?'は1回以上の出現にマッチしますが、可能な限り出現しません。あなたは正規表現の説明を求めていますか? –

+0

参考にしていただきありがとうございます。私はそれを私のお気に入りに追加したので、私はこの種のトピックを再現しません。私の質問に答える@ dan1111の答えを見てください。 – MadJlzz

+0

さて、ダンはhttp://regex101.comを複製しました。 –

答えて

1

この:

(?<Registred>.+?) 

という名前のキャプチャグループです。 <Registred>の部分は、実際にはマッチパターンの一部ではありませんが、カッコで囲まれた部分を参照するために使用できる名前を定義しています。

これは、標準のキャプチャグループの構文を使用して、次のと同じです:

(.+?) 

だから、それは単にそれができるだけ少ない文字にマッチ作る非貪欲数量詞で、一個の以上の文字に一致します。

したがって、パターンは "Déposéetenregistréle"で始まり、少なくとも1文字と改行で始まる文字列と一致します。

+0

さて、すべてが明確になりました。私は彼らがどこで何をしているのか理解できなかったと思うので、彼らが書いた表現は抽出したい文字列には役に立たない。これをすべて標準にするつもりです。おかげさまで – MadJlzz

関連する問題