我目前有以下代码,它在字符串“公式”中找到大写字母:http://pastebin.com/syRQnqCP
现在,我的问题是,如何更改该代码(忽略“if choice = 1:”循环中的位)以便将新分解的字符串的每个部分放入它自己的变量中?
例如,放入 NaBr 会导致字符串被分解为“Na”和“Br”。我需要将它们放在单独的变量中,以便我可以在我的 CSV 文件中查找它们。 最好它是一种生成的东西,所以如果有 3 个元素,如 MgSO4,O 将被放入一个单独的变量中,如 Mg 和 S。
如果不清楚,请告诉我,我会尝试让它更易于理解……不过,目前还没有想到这样做的方法。 :(
编辑:相关代码片段:
功能:
def split_uppercase(string):
x=''
for i in string:
if i.isupper(): x+=' %s' %i
else: x+=i
return x.strip()
字符串输入和查找:
formula = raw_input("Enter formula: ")
upper = split_uppercase(formula)
#Pull in data from form.csv
weight1 = float(formul_data.get(element1.lower()))
weight2 = float(formul_data.get(element2.lower()))
weight3 = float(formul_data.get(element3.lower()))
weightSum = weight1 + weight2 + weight3
print "Total weight =", weightSum
最佳答案
我认为有一种更简单的方法可以完成您想要做的事情。使用正则表达式。例如:
>>> [a for a in re.split(r'([A-Z][a-z]*)', 'MgSO4') if a]
['Mg', u'S', u'O', u'4']
如果你想把数字附加到正确的元素上,只需在正则表达式中添加一个数字说明符:
>>> [a for a in re.split(r'([A-Z][a-z]*\d*)', txt) if a]
[u'Mg', u'S', u'O4']
你真的不想“把每个部分放在它自己的变量中”。这在一般情况下没有意义,因为你不知道有多少部分,所以你无法提前知道要创建多少变量。相反,您想制作一个列表,如上例所示。然后您可以遍历此列表并对每个部分执行您需要执行的操作。
关于python - 按大写字母拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12124275/