正規表現を使用してGEDCOMファイルを解析しようとしていますが、行末にオプションのテキストがある行のテキストの次の行を取得します。各レコードは1行にする必要があります。行末の正規表現
これは、ファイルからの抜粋です:
0 HEAD
1 CHAR UTF-8
1 SOUR Ancestry.com Family Trees
2 VERS (2010.3)
2 NAME Ancestry.com Family Trees
2 CORP Ancestry.com
1 GEDC
2 VERS 5.5
2 FORM LINEAGE-LINKED
0 @[email protected] INDI
1 BIRT
、これは私が使用している正規表現です:
(\d+)\s+(@\[email protected])?\s*(\S+)\s+(.*)
これはで任意のテキストを含まないものを除き、すべての行のために働きます最後のもの、例えば最初のもの。たとえば、最初のレコードの最後の取得グループには、 '1 CHAR UTF-8'が含まれています。ここで
は紫色のキャプチャグループは、次の行に出血する方法を示し、regex101.comからのスクリーンショットです:
私は制限するために、$修飾子を使用して試してみました*ちょうどライン終了。これは2行目も行末であるため失敗します。
ご協力いただければ幸いです。
デイブ
'\ s'は改行にマッチし、通常のスペースで置き換えてください。' [^ \ S \ r \ n] '(PCREの場合は' \ h') https://regex101.com/r/N2ZWWo/1を参照してください( '^'は複数行オプションでも追加されています)。 –
Wiktorに感謝します。答えを作成したい場合は、私は最高のものとしてマークします。これはトリックを行うようです:(\ d +)+(@ \ S + @)? *(\ S +)*(。*) –
'。*'はデフォルトでは欲張りであり、可能な限り一致します。 '。*?$'を試して、それを非貪欲なものにしてください。 – phuzi