2016-07-29 7 views
1

正規表現でMARCレコードを解析し、そのフィールドを最初に取得したグループとして返​​し、その値を2番目に取得したグループとして返​​したいと思います。ここで私は正規表現のために、これまで持っているものです:MARCレコードを正規表現でどのように解析できますか?

(\n[0-9]{3})[ 0-9]{4}([^\n]*) 

([^\n]*)のような線で素晴らしい作品次の改行まですべてをバックアップを取得している最後のキャプチャグループ:しかし

001 868229892 
100 1 Montgomery, L. M.|q(Lucy Maud),|d1874-1942.,|eauthor. 
245 10 Anne of Green Gables /|cL.M. Montgomery. 
250 Aladdin hardcover edition. 
264 1 New York :|bAladdin,|c2014. 
300 440 pages &#59;|c22 cm 
336 text|2rdacontent. 
337 unmediated|2rdamedia. 
338 volume|2rdacarrier. 

それはラインの上に壊れた値になると、正規表現は、もはや機能していない:

520 Anne, an eleven-year-old orphan, is sent by mistake to 
     live with a lonely, middle-aged brother and sister on a 
     Prince Edward Island farm and proceeds to make an 
     indelible impression on everyone around her. 
650 0 Shirley, Anne (Fictitious character)|vJuvenile fiction. 

は、次の停留所の面積は、上記650する必要があります。したがって、正規表現では、までのすべてをキャプチャし、改行の後に3桁のが続くはずです。

私は([^\n0-9]*)を試してみましたが、それ以外の数字または改行以外の文字としてと一致すると解釈されます。その正確なシーケンスで改行と3桁のを一致させる必要があります

答えて

1

このregex101に示されているように、この正規表現:

(\n[0-9]{3})[ 0-9]{4}([^\n]+(?:\n\s+[^\n]+)*)

捕捉基([^\n]+(?:\n\s+[^\n]+)*)マッチ

  • 任意の非改行:[^\n]+
  • 余分な任意の数の行:(?:\n\s+[^\n]+)*
0

最後に先読みを追加して改行の後に3桁の数字が付いていることを確認します。正規表現を短くするためにできることもいくつかあります。

(\n\d{3})[ \d]{4}((?:(?!\n\d{3}).)*) 
+0

これは機能しません。 – JakeParis

+0

regex101でうまく動作します。 – RamenChef

関連する問題