正規表現の貪欲モードと非貪欲モードを詳しく解く

1087 ワード

正規表現の貪欲さと非貪欲さのマッチングとは
例えば:String str="abcaxc";     Patter p="ab*c";

貪欲マッチング:正規表現は一般的に最大長マッチング、すなわちいわゆる貪欲マッチングに傾いている.パターンpを使用して文字列strをマッチングすると、abcaxc(ab*c)にマッチングします.
欲張りでないマッチング:結果にマッチングすればいいので、マッチング文字が少なくなります.パターンpを使用して文字列strをマッチングすると、abc(ab*c)にマッチングします.
次に、正規表現の貪欲モードと非貪欲モードをインスタンスコードで見てみましょう.具体的には、次のようになります.
欲張りモード:マッチング可能な最大部分 

s = "This is a number 234-235-22-4223" 
r = re.match(r"(.+)(\d+-\d+-\d+-\d+",s)
r.groups()
("This is a number 23","4-235-22-4223")

欲張りモードは「.+」の+が最後の条件に合致する文字まで検索されるので、上記のコードの一番前の2つの数字は数字を抽出しても抽出されません.
非貪欲モード:マッチングが少なければ少ないほど良い

s = "This is a number 234-235-22-4223" 
r = re.match(r"(.+?)(\d+-\d+-\d+-\d+",s)
r.groups()
("This is a number ","234-235-22-4223")

欲張らないモードは「.+?」が最初の条件に合致する文字に一致すると停止します.
まとめ
以上述べたのは編集者が皆さんに紹介した正規表現の貪欲モードと非貪欲モードで、皆さんに役に立つことを望んでいます.もし皆さんが何か疑問があれば、私にメッセージを送ってください.編集者はすぐに皆さんに返事します.