0

私はpython yo match stringを使用しようとしています。

>> self._regexs = re.compile("(?P<g0>.*AMD$)|(?P<g1>.*AMD$)|(?P<g2>.*AMD$)|(?P<g3>.*)", re.DEBUG)
>> m = self._regexs.match("AMD")
>> print m.groups()
('AMD', None, None, None)

m.groups() が表示されると予想していました:

>> print m.groups()
('AMD', 'AMD', 'AMD', None) 

しかし、明らかに私は何か間違ったことをしています。このソリューションが機能しない理由と、探している結果が得られるように変更する方法を知りたいです。

4

1 に答える 1

3

正規表現はgreedy、最初の一致を受け入れるという点で機能しています。あなたの例では、特定の入力を含む最初のキャプチャ グループです。代替表現 ( によって通知される|) は、サンプル文字列によって満たされる最初の代替と常に一致します。

との間の異なるサブ正規表現ごとにバックトラックする必要があるため、実行できない正規表現のswitchandタイプを作成しようとしているようです。達成したい結果は、単一の正規表現では不可能です。case|

以下も参照してください。

于 2012-12-03T14:29:30.920 に答える