正则表达式:匹配一个组但 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
考虑以下字符串
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