正则表达式:匹配一个组但 return 一个不同的字符串

regex: match a group but return a different string

考虑以下字符串

C 1
D 2.2
Y 1
Z 2.2

我需要一个正则表达式来匹配 1 或 2,return 分别。以下正则表达式有效:

((C|Y) (\d)|(D|Z) (\d).(?:\d))

更重要的是:我还需要知道 (C|Y) 或 (D|Z) 是否匹配。

我打算在调用代码(python)中这样做。我可以测试字符串是 C、Y、D 还是 Z,但这种方法不可扩展。如果匹配了 C 或 Y,我希望正则表达式在第一个捕获组中为 return A,如果匹配了 D 或 Z,则为 B。这样,我只需要在调用代码中检查 A 或 B,我就可以轻松地通过更多成员扩展 类。有办法吗?

我还阅读了有关使用正则表达式替换字符串的内容。我不认为这对我来说是正确的工具,因为它会涉及创建另一个带有替换文本的字符串(如果我理解正确的话)。那不是我需要的。

您可以使用正则表达式匹配字符串,然后检查哪个组匹配。一旦您知道是哪一个,您可以return任何您想要的值。

import re

text = '''C 1
D 2.2
Y 1
Z 2.2'''

for s in text.splitlines():
  print("--- '" + s + "' ---")
  m = re.search(r'((C|Y) (\d)|(D|Z) (\d)\.(?:\d))', s)
  if m and m.group(2):
    print(m.group(3))
  elif m and m.group(4):
    print(m.group(5))
  else:
    print("NO MATCH!")

Python demo,输出:

--- 'C 1' ---
1
--- 'D 2.2' ---
2
--- 'Y 1' ---
1
--- 'Z 2.2' ---
2