my_string = "C2H6O"
a = re.findall("((Cl|H|O|C|N)[0-9]*)", my_string)
print(a)
输出为[("C2", "C"), ("H6", "H"), ("O", "O")]
,但我期望为["C2", "H6", "O"]
。
我有点理解元组,但是我觉得这段代码中没有任何内容导致元组("C2", "C")
中的第二个元素。
答案 0 :(得分:5)
因为您的模式包含捕获组。
来自re.findall()
:
如果模式中存在一个或多个组,则返回一个组列表;如果模式包含多个组,则这将是一个元组列表。
如果要摆脱它们,请使用以下模式:
r"(?:Cl|H|O|C|N)[0-9]*"
它会完全删除(不需要的)外部捕获组,并对字母字符使用非捕获组。
>>> re.findall(r"(?:Cl|H|O|C|N)[0-9]*", my_string)
['C2', 'H6', 'O']
答案 1 :(得分:-1)
您可以将正则表达式更改为:
re.findall("([Cl|H|O|C|N][0-9]*)", my_string)
您将得到您所期望的。这将删除一些分组。