2017-09-21 14 views
2

これは私の文字列です。正規表現による分割文字列

19282511~2017-08-28 13:24:28~Entering (A/B)~1013~283264/89282511~2017-08-28 13:24:28~Entering (A/B)~1013~283266/79282511~2017-08-28 13:24:28~Entering (A/B)~1013~283261 

私は以下のように分割され、この文字列をしたいと思います:値A/Bがありますので、私はスラッシュ(/)で盲目的に私の文字列を分割することはできません

19282511~2017-08-28 13:24:28~Entering (A/B)~1013~283264 
89282511~2017-08-28 13:24:28~Entering (A/B)~1013~283266 
79282511~2017-08-28 13:24:28~Entering (A/B)~1013~283261 

も、スプリットを取得します。

これを正規表現で表現する方法はありますか?

ご協力いただけると幸いです。

答えて

4

あなたは数字の間にある/に分割することがあります。

(?<=\d)/(?=\d) 

regex demo

詳細

  • (?<=\d)参照してください - すぐに表示されるように数字を必要と肯定後読みを現在地の左側にある
  • / - / char
  • (?=\d) - 現在の位置のすぐ右に数字が表示される必要がある肯定的な先読み。

\dパターンが非消費パターンの内側にあるので、唯一/を分割時に削除され、数字が得られた項目に残ります。

enter image description here

もう一つのアイデアは、

/?([^~]*(?:~[^~]*){3}~\d+) 

を使用してこれらの文字列にマッチし、キャプチャことですthis regex demoを参照してください。

詳細

  • /?から1または0 /文字
  • ([^~]*(?:~[^~]*){3}~\d+) - グループ1(あなたがつかむために必要なもの):

    • [^~]* - 以外のゼロ個以上の文字~
    • (?:~[^~]*){3} - ~のシーケンスが3つ以上続き、~
    • ~\d+ - a ~以外の0以上の文字とそれに続く1桁の数字。 C#コードは、

    のようになります。var results = Regex.Matches(s、@ "/?(?[^〜] (:〜[^〜]){3}〜\ D +)」) .Cast() .Select(M => m.Groups 1 .Valueの) .ToList()。

enter image description here

:デフォルトでは、\d一致すべてのUnicode数字あなたはこの動作を望まない場合は、RegexOptions.ECMAScriptオプションを使用、またはのみマッチASCII数字に[0-9]\dを交換

+1

これはRegexの美しさです。迅速かつすばらしい答えに感謝します。私はこれを7分で答えとして受け入れます。 –

関連する問題