1

次のようなサブ文字列の最初の2桁を抽出する正規表現を設計します。

  1. 文字で終わる
  2. 2から始めます

したがって、から"234b342d3"、一致結果は次のようになります。
23(from 234b
2d(from 2d

私のおおよその答えはですが"(?=1.*)[a-zA-Z]"、うまくいかないようです。

お返事ありがとうございます。

4

1 に答える 1

0

私はあなたが意味したと思います(?=2.*)...

(?=2.*)2次の文字の後に1つ以上の文字が続くことを意味します。しかし、正規表現は次の文字がでなければならないと言っている[a-zA-Z]ので、何も一致しません(文字が同時に一致することはできないため2[a-zA-Z]

先読み(2.*[a-zA-Z])を削除するだけで正しい方向に進むことができますが、それでも次の点は間違っています。

  • 最初の2文字をグループに入れないので、抽出できます
  • 貪欲なマッチング(貪欲に一致する.*ため234b342d、単に234b2dはなく、前の一致ですでにカバーされているため、一致しません)

したがって、最初の2文字を角かっこで囲んでグループに入れ、貪欲でない一致を()( ).*?の代わりに追加します。でも今:.*(2.).*?[a-zA-Z]

  • 2の後に文字が続く場合は一致しません

したがって、それを説明するために後読みを追加する必要があります。

したがって、最終的に次のようになります。

(2.)((?<=[a-zA-Z])|.*?[a-zA-Z])

次に、最初のグループを抽出します(これを行う方法は言語によって異なります)。

(2.)2で始まり、最初の2文字をグループに入れるようにしてください。あなたの例で
(?<=[a-zA-Z])説明するために後ろ向きです(aの後に文字が続きます)は貪欲ではない一致です-文字で終わることを意味します2d2
.*?
[a-zA-Z]

于 2013-03-16T12:55:41.350 に答える