2016-10-24 6 views
0

最初のカンマの後に文字列に現れる大文字(しかし他にもあるかもしれません)と一致させようとしています。正規表現 - 指定されたパターンの後に特定の文字を一致させよう

姓と名がカンマで区切られた名前のリストがあります。

Stevenson, Barry J. F. 
Smith, Julia 

そして私はその

B J F 
J 

のようなものを合わせたい私は(?<=,)[A-Z]などの後読みの式を使用しようとしましたが、それはコンマ以下の最初の文字だけに一致します。誰かが助けることができますか?

+1

しかしelse'何かのようになります。


ここ拡大説明がですか?あなたの質問はかなり曖昧です – hek2mgl

+0

私はそれが他のものとマッチするために使用できることを意味します。しかし、私の質問は正確に例である。 –

答えて

0

を正規表現では\Gが必要です(したがって、一部の正規表現エンジンはこの式を実行できません)。

それは私たちが( (?!^)が必要な理由であるか、文字列の先頭、)私たちの最後の試合の終わりからマッチングを開始することができますので、
/(?:,|\G(?!^))[^A-Z]*\K[A-Z]/g 

Demo.


\Gの使用が不可欠である - すべてカンマの後に。

また、一致を「リセット」してキャプチャグループを使用する必要がないように、\Kを使用します。ただし、最後を[^A-Z]*([A-Z])に簡単に置き換えて、キャプチャグループにアクセスできます。

最後に、[^A-Z]*の代わりに、怠惰なドットマッチオール(.*?)を使用できます。私はできるだけ具体的にすることを好む。 `意味は何

(?:  (?# Start non-capturing group for alternation) 
    ,  (?# Match a comma) 
|  (?# OR) 
    \G  (?# Match the end of the last match) 
    (?!^) (?# Dont match the beginning) 
)  (?# End non-capturing group) 
[^A-Z]* (?# Match 0+ non-capital letters) 
\K  (?# Reset the match for clarity) 
[A-Z] (?# Match capital letter) 
+0

ほんの少しの注意点 - '\ G'の後ろに先読みを置く必要があるので、必要に応じて評価されます。 –

+0

@SebastianProskeあなたは '(?!^)\ G'以外の何かを意味しますか?もしそうなら、私はあなたが何を意味するか分からないので、例を感謝します。 – Sam

+1

'\ G(?!^)'なので、基本的には逆です。 –

0

あなただけのカンマを削除する必要があり、それはあなたが望むものと一致します。私の知る限り、これを行うための唯一の方法を

(?<=)[A-Z] 

Working demo

enter image description here

関連する問題