将字符串拆分为多个单词

Posted

技术标签:

【中文标题】将字符串拆分为多个单词【英文标题】:Splitting string into multiple words 【发布时间】:2022-01-18 08:30:14 【问题描述】:

我有多个股票名称如下

'ADANIENT29APR211120'
'AARTIIND29APR211360'
'ADANIPORTS29APR21730'

我打算做的是将股票名称,日期,价格分开并打印出来,如图所示

'ADANIENT 29APR21 1120'
'AARTIIND 29APR21 1360'
'ADANIPORTS 29APR21 730'

现在我知道了一个名为 datefinder 的模块,它可以帮助我在 python 中提取日期

我是这样使用的:

import datefinder

string_with_dates = '''
    ADANIENT29APR211120PE
'''

matches = datefinder.find_dates(string_with_dates)
for match in matches:
    print(match)

这给我的输出是

runfile('C:/Users/hozef/AppData/Local/Temp/untitled0.py', wdir='C:/Users/hozef/AppData/Local/Temp')
2021-04-29 21:11:20

我的问题是,我现在使用 datefinder 提取字符串中的日期,如何从输入字符串中提取特定股票的名称和价格

【问题讨论】:

如果您为输入定义约束,这很容易。如果您设置了您的股票代码不能包含数字的约束,您可以应用正则表达式甚至根据数字的位置中断并创建单独的字段。 【参考方案1】:

使用re.findall

inp = ['ADANIENT29APR211120', 'AARTIIND29APR211360', 'ADANIPORTS29APR21730']
for x in inp:
    parts = re.findall(r'^([A-Z]+)(\d2[A-Z]3\d2)(\d+)$', x)[0]
    print(' '.join(parts))

打印出来:

ADANIENT 29APR21 1120
AARTIIND 29APR21 1360
ADANIPORTS 29APR21 730

这里使用的正则表达式表示匹配:

^
([A-Z]+)              stock name in all caps
(\d2[A-Z]3\d2)  2 digit day, 3 letter all caps month, 2 digit year
(\d+)                 integer price
$

【讨论】:

以上是关于将字符串拆分为多个单词的主要内容,如果未能解决你的问题,请参考以下文章