Python: 如何将字符串与列表分开

Python: How to separate a String with a List

假设我知道货币的类型。如何分隔以下字符串? Units = ["Dollar", "Yuan", "Rupee", "USDT"]

例如:

TwoDollar
FiveYuan
EightRupee
TwentyUSDT

结果:

Two
Five
Eight
Twenty

Dollar
Yuan
Rupee
USDT

谢谢!

您可以使用 re 模块:

import re

s = ["TwoDollar", "FiveYuan", "EightRupee", "TwentyUSDT"]
units = ["Dollar", "Yuan", "Rupee", "USDT"]

r = re.compile("(.*?)(" + "|".join(map(re.escape, units)) + ")")

amounts, u = [], []
for word in s:
    m = r.search(word)
    if m:
        amounts.append(m.group(1))
        u.append(m.group(2))

print(*amounts, sep="\n")
print()
print(*u, sep="\n")

打印:

Two
Five
Eight
Twenty

Dollar
Yuan
Rupee
USDT

我认为对您来说最简单的方法是使用“拆分”功能,

mySting = "twentytwodollar"
print(myString.split("dollar"))
money = "Yuan"
mySting = "FiveYuan"
print(myString.split(money))

the complete datasheet

好吧,这是 python 的非常基本的问题,您必须先进行研究,但如果您需要解释,我会以最简单的方式为您提供帮助的答案。

values = ['TwoDollar',
'FiveYuan',
'EightRupee',
'TwentyUSDT']

currencies = ['Dollar','Yuan','Rupee','USDT']

for value in values:
    for currency in currencies:
        if currency in value:
            print(value[: value.index(currency,0)])
            print(value[ value.index(currency,0) :])

对于Python3.9

units = ["Dollar", "Yuan", "Rupee", "USDT"]
values = ["TwoDollar","FiveYuan","EightRupee","TwentyUSDT"]

value_list = []
unit_list = []
for value in values:
    for unit in units:
        if unit in value:
            value_list.push(string1.removesuffix(unit))
            unit_list.push(unit)
            break

# print your value_list and unit_list

阅读更多关于 removesuffix here

试试这个单线:

import re

uns = ["Dollar", "Yuan", "Rupee", "USDT"]
lst = ["TwoDollar", "FiveYuan", "EightRupee", "TwentyUSDT"]

amounts, units = map(list, 
                     zip(*(re.match(f'^(.*)({u})$', s).groups() 
                           for u, s in zip(uns, lst))))

结果:

>>> amounts
['Two', 'Five', 'Eight', 'Twenty']
>>> units
['Dollar', 'Yuan', 'Rupee', 'USDT']

由于金额和单位在您的字符串中都以大写字母开头,您甚至不需要知道货币的类型,只需尝试:

import re

values = ["TwoDollar", "FiveYuan", "EightRupee", "TwentyUSDT"]

amounts, units = [], []
for s in values:
    outputs = re.findall(r'[A-Z]+[a-z]*', s) 
    amounts.append(outputs[0])
    units.append(outputs[1])

print(*amounts, '\n', *units, sep="\n")

为了完整起见,这里有一个简单的列表理解示例

cur = ['Dollar', 'Yuan', 'Rupee', 'USDT']

vals= ['TwoDollar', 'FiveYuan', 'EightRupee', 'TwentyUSDT']

print([a.split(x)[0] for a in vals for x in cur if len(a.split(x)) == 2]) 

输出是

['Two', 'Five', 'Eight', 'Twenty']

如果你想在结果中包含货币,你可能想构建一个元组作为列表项。

[(a.split(x)[0], x) for a in vals for x in cur if len(a.split(x)) == 2]

给你这个

[('Two', 'Dollar'), ('Five', 'Yuan'), ('Eight', 'Rupee'), ('Twenty', 'USDT')]

干杯

马库斯