python 正規表現で和集合 | を使用した場合の group() で想定した出力が得られない


pythonの正規表現について質問です。正規表現で、|を用いてマッチを行なったのですが、意図しないNoneが出力されてしまいます。どなたか、理由をご教授いただけますと幸いです。

**現状のコード**

[code]

    pattern = r"b(\d)|a(\d)"
    sentence = "a4"
    
    result = re.match(pattern, sentence)
    if result:
        print(result.group())
        print(result.group(1))
    
[/code]

**意図する出力**

[code]

    a4
    4
    
[/code]

**実際の出力**

[code]

    a4
    None
    
[/code]

**環境**

[code]

    python3 --version
    -Python 3.7.3
    
[/code]




正規表現のグループ番号は、パターン文字列の内容に関わらず、`(`が登場する順に1から割り振られます。  
そのため、 `b(\d)|a(\d)` というパターンであれば

  * `b(\d)`側の`(\d)`が1
  * `a(\d)`側の`(\d)`が2

と割り振られます。このことを踏まえると次のような結果になるはずです。

  * `"a4"`の場合 
    * マッチ全体 `a4`
    * グループ1 `None`
    * グループ2 `4`
  * `"b5"`の場合 
    * マッチ全体 `b5`
    * グループ1 `5`
    * グループ2 `None`

* * *

以下はPythonには適用されません。

一部の正規表現エンジンは名前付きグループを定義できます。更に複数の名前付きグループを統合する機能を持つものもあります。例えば[.NETの正規表現](https://docs.microsoft.com/ja-
jp/dotnet/standard/base-types/grouping-constructs-in-regular-
expressions#named_matched_subexpression)では次のようにでき、名前付きグループ `num` で参照できます。

[code]

    b(?<num>\d)|a(?<num>\d)
    
[/code]

  * `"a4"`の場合 
    * マッチ全体 `a4`
    * グループnum `4`
  * `"b5"`の場合 
    * マッチ全体 `b5`
    * グループnum `5`

[Pythonは名前付きグループを定義できますが、グループは統合できない](https://docs.python.org/ja/3/library/re.html#index-17)ようです。




正規表現のグループ番号は、パターン文字列の内容に関わらず、`(`が登場する順に1から割り振られます。  
そのため、 `b(\d)|a(\d)` というパターンであれば

  * `b(\d)`側の`(\d)`が1
  * `a(\d)`側の`(\d)`が2

と割り振られます。このことを踏まえると次のような結果になるはずです。

  * `"a4"`の場合 
    * マッチ全体 `a4`
    * グループ1 `None`
    * グループ2 `4`
  * `"b5"`の場合 
    * マッチ全体 `b5`
    * グループ1 `5`
    * グループ2 `None`

* * *

以下はPythonには適用されません。

一部の正規表現エンジンは名前付きグループを定義できます。更に複数の名前付きグループを統合する機能を持つものもあります。例えば[.NETの正規表現](https://docs.microsoft.com/ja-
jp/dotnet/standard/base-types/grouping-constructs-in-regular-
expressions#named_matched_subexpression)では次のようにでき、名前付きグループ `num` で参照できます。

[code]

    b(?<num>\d)|a(?<num>\d)
    
[/code]

  * `"a4"`の場合 
    * マッチ全体 `a4`
    * グループnum `4`
  * `"b5"`の場合 
    * マッチ全体 `b5`
    * グループnum `5`

[Pythonは名前付きグループを定義できますが、グループは統合できない](https://docs.python.org/ja/3/library/re.html#index-17)ようです。

