0

だから、私はこれに従う正規表現を構築しました:

4!a2!a2!c[3!c]

これはに翻訳されます

  • 4 つの英字の後に続く
  • 2 つの英字の後に続く
  • 2 文字の後に続く
  • 任意の3文字

これは、SWIFT BIC コード HSBCGB2LXXX の標準形式です。

これを文字列から引き出すための私の正規表現は次のとおりです。

(?<=:32[^:]:)(([a-zA-Z]{4}[a-zA-Z]{2})[0-9][a-zA-Z]{1}[X]{3})

現在、これは特定のタグ (32) をターゲットにしており、機能していますが、それが最もクリーンであるかどうかはわかりません。また、H の前に文字がある場合は失敗します。

照合される文字列は次のとおりです。

:32B:HsBfGB4LXXXHELLO

以下は を返しますHSBCGB4LXXXが、これは:

:32B:2HsBfGB4LXXXHELLO

何も返しません。

編集

明確にするために。:2xnumber:optional 文字 (例: :58A:) で始まる複数の行を含む文字列があります。照合を開始する行を指定し、行のどこからでも BIC を返したいと考えています。

編集 役立ついくつかのサンプルデータ:

:20:ABCDERF  Z
:23B:CRED
:32A:140310AUD2120,
:33B:AUD2120,
:50K:/111222333                        
Mr Bank of Dad              
Dads house
England            
:52D:/DBEL02010987654321
address 1 
address 2
:53B:/HSBCGB2LXXX
:57A://AU124040
AREFERENCE
:59:/44556677
A line which HSBCGB2LXXX contains a BIC
:70:Another line of data
:71A:Even more

では、タグ 53 または 59 を変数として渡し、BIC HSBCGB2LXXX のみを返す必要があります。

4

2 に答える 2

0

あなたの正規表現があなたが上で説明したものと完全に一致していないため、あなたの質問を完全に理解しているかどうかはよくわかりません。たとえば、3 つのオプション文字について言及しましたが、正規表現では 3 つの必須 X-es を使用します。

ただし、実際の正規表現はさらにきれいにすることができます。

  • [a-zA-Z]{4}[a-zA-Z]{2} の代わりに、単に [a-zA-Z]{6} を使用できます。これをグループ化するかっこは不要な場合があります。
  • {1} を省略しても結果は変わりません。
  • X は括弧で囲む必要はありません。

全体として (?<=:32[^:]:)([a-zA-Z]{6}[0-9][a-zA-Z]X{3}) は短く、非常に一致します。同じケース。

ドメインをより適切に説明すると、おそらくさらに改善することもできます。

于 2014-03-12T12:24:52.150 に答える