2016-07-25 1 views
1

こんにちは、指定された文字列から必要な文字列を抽出しようとしています。与えられた文字列は以下のようになります。重複データで値を取得するための正規表現

1 | A1 | ID11-name11、X | A2 | ID21-name21、Y | A3 | ID31-name31〜ID32-name32、Y4 | A4 | ID41-name41〜id42-name42〜id43-name43

予想される出力:

A1〜name11 | A2〜name21 | A3〜name31 | A3〜name32 | A4〜name41 | A4〜name42 | A4〜name43

正規表現:

(^|,)[^|]{0,}\|([^|]{0,})\|(~){0,}[^-]{0,}-([^,~]{0,}) 

$ 2〜$ 4を抽出しています。または\ 2〜\ 4 |

正規表現出力:

A1〜name11 | A2〜name21 | A3〜name31 |

a3~name32a3~name31と一緒に正規表現で取得できますか?複数の正規表現を使用しても問題ありません。パイプ記号の後の3番目の部分の値は、4つの異なる値(id41-name41~id42-name42~id43-name43)に限定されません。これは次のようになる可能性がありますid41-name41~id42-name42~id43-name43~id43-name43~id43-name43~id43-name43...

+0

用語の数は4に制限されていますか(無制限ですか) – Bohemian

+0

@ボヘミアン4に限定されませんが、固定値に制限されています – Prashanth

答えて

1

最初に1つはに分割され、多くの部分に文字列が分割されています。 2番目は、最も長い繰り返し部分に依存します。あなたの場合はidxx-namexxです。 に合理的なに制限されている場合は、正規表現でその部分を繰り返してすべての部分を取得することができます。

([a-zA-Z]\d)\|(id\d+-(name\d+))(~?id\d+-(name\d+))? 
______________-------1-------- _---------2--------_________ 

グループはあなたがRegex101 Site

でそれを確認することができます \ 1〜\ 3と \ 1〜\ 5

次のようになります。2のインスタンスのためには、次のように第二部を追加する必要があります

+0

答えに感謝します。しかし、 'id31-name31〜id32-name32'の値は2つの値に限定されず、' id31-name31〜id32-name32〜id32-name32〜id32-name32'となります。他の解決策がありますか? – Prashanth

+0

は4に制限されていますか?繰り返しグループ化する際の問題は、最後に一致したグループだけを捕まえることができます。なぜなら、それらを捕まえたい場合は、2度目のグループを何度も繰り返す必要があるからです。 –

+0

それは4に限定されていません。繰り返しは何回でもかまいません。 – Prashanth

関連する問題