python 如何将字符串分解为多个组件

oyt4ldly  于 2022-12-28  发布在  Python
关注(0)|答案(4)|浏览(160)

我有一个字符串“ABCAPITAL23JAN140CE”。这是在证券交易所交易的期权的符号。字符串的ABCAPITAL部分是公司名称。23是2023年。JAN是月份。140是执行价格,CE是期权的类型。
对于不同的选项,所有这些组件都可以不同。
我需要一个函数,使字符串片段=拆分字符串('ABCAPITAL23JAN140CE ')
其中,返回字符串片段=[“ABCAPITAL”,23,“JAN”,140,“CE”]
我该怎么做呢?

dgiusagp

dgiusagp1#

您可以将re.findall与[A-Z]+|\d+一起使用
regex101上查看匹配项

import re
print(re.findall(r"[A-Z]+|\d+", "ABCAPITAL23JAN140CE"))

# Or converting to int
print([int(v) if v.isdigit() else v for v in re.findall(r"[A-Z]+|\d+", "ABCAPITAL23JAN140CE")])

产出

['ABCAPITAL', '23', 'JAN', '140', 'CE']
['ABCAPITAL', 23, 'JAN', 140, 'CE']

另一个选项与4个捕获组匹配的数字和短路部分的月份一样JANFEB等...

^(\S*?)(\d+)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(\d+)(\S+)$

查看regex101上的捕获组匹配

import re
m = re.match(r"(\S*?)(\d+)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(\d+)(\S+)$", "ABCAPITAL23JAN140CE")
if m:
    print(list(m.groups()))

产出

['ABCAPITAL', '23', '140', 'CE']
2hh7jdfx

2hh7jdfx2#

def splitstring(s):
    l=[s[0]]
    for h in s[1:]:
       H=h + l[-1][0]
    
        if H.isdigit() or H.isalpha():
            l[-1]+=h
        else:
            l.append(h)
    return l
        
        

print(splitstring('ABCAPITAL23JAN140CE'))
envsm3lx

envsm3lx3#

这个方法测试两个相邻的字符是否是相同的类型,如果是,那么连接字母,否则分裂。

st = 'ABCAPITAL23JAN140CE'
    l = []
    s = ""
    for i in range(0,len(st)-1):
        if (st[i].isnumeric() == st[i+1].isnumeric()) or (st[i].isalpha() == st[i+1].isalpha()):
            s = s + st[i]
        else:
            s = s + st[i]
            if s.isnumeric():
                l.append(int(s))
            else:
                l.append(s)
            s = ""

输出:

['ABCAPITAL', 23, 'JAN', 140]
2vuwiymt

2vuwiymt4#

导入重新打印(参考findall(r”[A-Z]+|\d+",“大写字母缩写2014年1月23日”))

相关问题