繁体   English   中英

为什么此代码返回包含2个元素的元组?

[英]Why Does This Code Return A Tuple With 2 Elements?

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")

因为您的模式包含捕获组。

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']

您可以将正则表达式更改为:

re.findall("([Cl|H|O|C|N][0-9]*)", my_string)

您将得到您所期望的。 这将删除一些分组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM