python - 按大写字母拆分字符串

标签 python

我目前有以下代码,它在字符串“公式”中找到大写字母: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/

相关文章:

python - 如何在python中将元素添加到已排序的redis集中

python - 更新列表以包含另一个列表的新元素(质因数计算)

python - 模块 Flask 不会启动

Python 条件 XML 编写

python - 使用 Flask 更新 HTML 字段

python - 在 Pygame 中获取旋转图像的旋转矩形

python - 没有递归搜索python的xml解析

python - 无法在 ubuntu 18.04 中将 python 程序作为服务运行

python - Get_Pressed 行为异常

python - 使用电子邮件验证用户帐户 (Google App Engine)