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

2024-10-03 11:20:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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")。你知道吗


Tags: 代码re元素stringclmy元组print
2条回答

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

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

你会得到你所期望的。这将删除一些分组。你知道吗

因为您的模式包含捕获组。你知道吗

^{}

If one or more groups are present in the pattern, return a list of groups; this will be a list of tuples if the pattern has more than one group.

如果您想摆脱它们,请使用以下模式:

r"(?:Cl|H|O|C|N)[0-9]*"

它完全删除(不需要的)外部捕获组,并为alpha字符使用非捕获组。你知道吗

>>> re.findall(r"(?:Cl|H|O|C|N)[0-9]*", my_string)
['C2', 'H6', 'O']

相关问题 更多 >