誰かがこの正規表現がどのように機能するかを説明してもらえますか?
^(a)|\1$
?
私はそれを次のように解釈します:
*1。文字列の開始、
に続く:
*2。また:
*2a。、a
_
また:
*2b。以前に一致した(a)
グループ、
に続く:
*3。文字列の終わり
(a)
ただし、 2aよりも2bを選択した場合、以前に一致したグループがないため、2bは不可能です。したがって、解釈は次のようになります。
*1。文字列の開始、
に続く:
*2。、a
_
に続く:
*3。文字列の終わり
言い換えれば、その正規表現はちょうど:( ^a$
ORされた後方参照は無意味であると言うこともできます)と同等です。
しかし、Pythonでは次のようになります。
>>> import re
>>> re.findall(r'^a$', r'aa')
[] # as expected
>>> re.findall(r'^(a)|\1$', r'a')
['a'] # as expected
>>> re.findall(r'^(a)|\1$', r'aa')
['a'] # NOT as expected
どうすればaa
一致することができ^(a)|\1$
ますか?