将字符串拆分为多个单词

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
$

【讨论】:

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

如何将字符串拆分为多个部分?

如何在 bash shell 中将一个字符串拆分为多个字符串,至少用一个空格分隔?

2021-10-15:单词拆分。给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你

拆分一个字符串并将其放入两个数组中

如何在不破坏单词的情况下将字符串拆分为行?

如何在Python中将具有名称(1个或多个单词)和数字的单行输入字符串拆分为[“名称”,“数字”]?