2017-10-30 24 views
0

フィールドが市区町村のカンマ状態を保持することになっている、バー区切りのテキストファイルがあります。例:正規表現:グループORグループ

|Boston, MA| 

私のアプリケーションでは、2つの異なるフィールドとして都市と州を取得する必要があります。これは、行全体を処理するために、より大きな正規表現の一部ですが、このフィールドを処理する部分がある:

\|(.+),(.+[^|]+)\| 

そして、これが1つのグループにコンマとした後、別のグループにテキストの前のテキストをキャプチャします。フィールドが期待どおりに塗りつぶされたときに効果的です。

私の問題は時々、このフィールドはでてくるということである次のいずれか

  • NOバーの間の情報なし(||

または - コンマなしのテキスト(|unknown|

この正規表現を次のように変更する必要があります。

  • バーの間の情報がない場合は、コンマのないテキスト文字列があれば、私はまだブランク値

  • で2グループを取得、その文字列がグループ1としてキャプチャ取得し、グループ2がで撮影されましたあなたが期待するものを手に入れる必要があり、この正規表現では、ブランク値

答えて

2

\|\s*([^,|]*?)\s*(?:,\s*([^|]*?)\s*)?\| 

コンマがない場合は、グループ1と2 をいっぱいには、あなたは空を取得しますグループ2 バーの間に値(または空白)がない場合、2つの空のグループが得られます。

あなたは空白がマッチの一部になりたい場合は正規表現は次のようになります。

\|([^,|]*)(?:,([^|]*))?\| 
+0

これはOPの要件に応じて正しい答えです。 '\ | \ s *([^、| * *)\ s *(?:、\ s *([^ |] *)\ s *)?\ |あなたの最初の式から遅延量子を取り除くことができます。 ' – ctwheels

+0

ありがとうございます。怠惰な量子化器がなければ、グループの値の最後に空白が入る可能性があります。 '| Boston、MA | 'のように、2番目のグループは" MA "(最後のスペース)です。 – spaark

+0

有効な点は、それは値をクリーンアップするのに役立ちます – ctwheels