次のようなサブ文字列の最初の2桁を抽出する正規表現を設計します。
- 文字で終わる
- 2から始めます
したがって、から"234b342d3"
、一致結果は次のようになります。
23
(from 234b
)
2d
(from 2d
)
私のおおよその答えはですが"(?=1.*)[a-zA-Z]"
、うまくいかないようです。
お返事ありがとうございます。
次のようなサブ文字列の最初の2桁を抽出する正規表現を設計します。
したがって、から"234b342d3"
、一致結果は次のようになります。
23
(from 234b
)
2d
(from 2d
)
私のおおよその答えはですが"(?=1.*)[a-zA-Z]"
、うまくいかないようです。
お返事ありがとうございます。
私はあなたが意味したと思います(?=2.*)...
。
(?=2.*)
2
次の文字の後に1つ以上の文字が続くことを意味します。しかし、正規表現は次の文字がでなければならないと言っている[a-zA-Z]
ので、何も一致しません(文字が同時に一致することはできないため2
)[a-zA-Z]
。
先読み(2.*[a-zA-Z]
)を削除するだけで正しい方向に進むことができますが、それでも次の点は間違っています。
.*
ため234b342d
、単に234b
で2d
はなく、前の一致ですでにカバーされているため、一致しません)したがって、最初の2文字を角かっこで囲んでグループに入れ、貪欲でない一致を()( ).*?
の代わりに追加します。でも今:.*
(2.).*?[a-zA-Z]
したがって、それを説明するために後読みを追加する必要があります。
したがって、最終的に次のようになります。
(2.)((?<=[a-zA-Z])|.*?[a-zA-Z])
次に、最初のグループを抽出します(これを行う方法は言語によって異なります)。
(2.)
2で始まり、最初の2文字をグループに入れるようにしてください。あなたの例で
(?<=[a-zA-Z])
説明するために後ろ向きです(aの後に文字が続きます)は貪欲ではない一致です-文字で終わることを意味します2d
2
.*?
[a-zA-Z]