gpt4 book ai didi

python - 组合可匹配多个困惑股票条目的 RE

转载 作者:行者123 更新时间:2023-11-30 23:13:35 24 4
gpt4 key购买 nike

我正在尝试使用 RE 来清理字符串并将它们放入干净的有序股票列表中,同时保留原始顺序或不重复股票。

例如将字符串(注意多余的随机字母和不一致的间距):

SLTD +14% NRX +14%L MEIP -68% YU -345% RXII -13%RESN -10% LBIO -10% WHLR-10% HSIDD -339%

进入类似的列表

stocks = ['SLTD +14%', 'NRX +14%', 'MEIP -68%', 'YU -345%', 'RXII -13%','RESN -10%', 'LBIO -10%', 'WHLR -10%', 'HSIDD -339%']

我需要 RE

  1. 选择 2、3、4 或 5 个大写字母(股票代码)(不依赖前面的空格,因为 RXII -13%RESN -10% 等情况会失败)
  2. 识别代码的最后一个字母与 + 或 - 之间是否有空格,如果没有则插入一个空格。 (清理像 WHLR-10% 这样的案例)
  3. % 后不包含随机字母(例如 NRX +14%L)
  4. 如果只有股票代码而没有百分比(即 NES -14% HELI),则不包含股票
  5. 能够处理 2 位数和 3 位数百分比 (WHLR-10% HSIDD -339%)

这是迄今为止我得到的最好的代码,它用 4 个、然后 3 个、然后 2 个字母重复每只股票,当然是糟糕的代码。

任何帮助将不胜感激,感谢您抽出时间。

allStocks = ['SLTD +14% NRX +14%L MEIP -68% YU -345% RXII -13%RESN -10% LBIO -10% WHLR-10% HSIDD -339%','ENZ -17% NSLP -17% SCON -15% PKOH -15% PFIE -14% PRTS -14% NES -14% HELI']

for messyDayOfStocks in allStocks:
stocksWithStuff = re.findall('(\S\S\S\S\S\s\D\d\d\d%)', "messyDayOfStocks")
stocksWithStuff.append(re.findall('(\S\S\S\S\s\D\d\d\d%)', "messyDayOfStocks"))
stocksWithStuff.append(re.findall('(\S\S\S\s\D\d\d\d%)', "messyDayOfStocks"))
stocksWithStuff.append(re.findall('(\S\S\s\D\d\d\d%)', "messyDayOfStocks"))
stocksWithStuff.append(re.findall('(\S\S\S\S\S\s\D\d\d%)', "messyDayOfStocks"))
stocksWithStuff.append(re.findall('(\S\S\S\S\s\D\d\d%)', "messyDayOfStocks"))
stocksWithStuff.append(re.findall('(\S\S\S\s\D\d\d%)', "messyDayOfStocks"))
stocksWithStuff.append(re.findall('(\S\S\s\D\d\d%)', "messyDayOfStocks"))
print(stocksWithStuff)

最佳答案

你也许可以使用这个:

import re

allStocks = ['SLTD +14% NRX +14%L MEIP -68% YU -345% RXII -13%RESN -10% LBIO -10% WHLR-10% HSIDD -339%','ENZ -17% NSLP -17% SCON -15% PKOH -15% PFIE -14% PRTS -14% NES -14% HELI']
stocksWithStuff = []

for messyDayOfStocks in allStocks:
# Get each match
for match in re.finditer(r"([A-Z]{2,5})\s*([-+]?\d{2,3}%)", messyDayOfStocks):
# Format it
stocksWithStuff.append("{0} {1}".format(match.group(1), match.group(2)))

print(stocksWithStuff)

输出:

['SLTD +14%', 'NRX +14%', 'MEIP -68%', 'YU -345%', 'RXII -13%', 'RESN -10%', 'LBIO -10%', 'WHLR -10%', 'HSIDD -339%', 'ENZ -17%', 'NSLP -17%', 'SCON -15%', 'PKOH -15%', 'PFIE -14%', 'PRTS -14%', 'NES -14%']

上面使用的是Python3,但它应该很容易转换为Python2语法。

ideone demo

对于正则表达式本身:

([A-Z]{2,5})  # 2 to 5 uppercase letters and store in first group
\s* # Any number of spaces (including none)
(
[-+]? # Any sign if present
\d{2,3}% # 2 to 3 digits and % sign
) # Store the above to the second group

关于python - 组合可匹配多个困惑股票条目的 RE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29240261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com