Python中将股票报价拆分为令牌

Python中将股票报价拆分为令牌,python,regex,string,Python,Regex,String,我需要读取股票报价的文本文件,并对每个股票数据(即文件中的一行)进行一些处理 股票数据如下所示: [class,'STOCK'],[symbol,'AAII'],[open,2.60],[high,2.70],[low,2.53],[close,2.60],[volume,458500],[date,'21-Dec-04'],[openClosePDiff,0.0],[highLowPDiff,0.067],[closeEqualsLow,'false'],[closeEqualsHigh,'f

我需要读取股票报价的文本文件,并对每个股票数据(即文件中的一行)进行一些处理

股票数据如下所示:

[class,'STOCK'],[symbol,'AAII'],[open,2.60],[high,2.70],[low,2.53],[close,2.60],[volume,458500],[date,'21-Dec-04'],[openClosePDiff,0.0],[highLowPDiff,0.067],[closeEqualsLow,'false'],[closeEqualsHigh,'false']
如何将行拆分为标记,其中每个标记都包含在方括号中,即。对于上面的行,令牌应该是
“class,'STOCK'”
“symbol,'AAII'
等。

打印(关于findall(\[(.*?\]),inputline))

或者可能没有正则表达式:

print(inputline[1:-1]。拆分(“]),[”)
print(re.findall(“\[(?)\”),inputline))

或者可能没有正则表达式:

打印(输入行[1:-1]。拆分(“],[”)
请尝试以下代码:

#!/usr/bin/env python3

import re

str="[class,'STOCK'],[symbol,'AAII'],[open,2.60],[high,2.70],[low,2.53],[close,2.60],[volume,458500],[date,'21-Dec-04'],[openClosePDiff,0.0],[highLowPDiff,0.067],[closeEqualsLow,'false'],[closeEqualsHigh,'false']"
str = re.sub('^\[','',str)
str = re.sub('\]$','',str)
array = str.split("],[")
for line in array:
    print(line)
请尝试以下代码:

#!/usr/bin/env python3

import re

str="[class,'STOCK'],[symbol,'AAII'],[open,2.60],[high,2.70],[low,2.53],[close,2.60],[volume,458500],[date,'21-Dec-04'],[openClosePDiff,0.0],[highLowPDiff,0.067],[closeEqualsLow,'false'],[closeEqualsHigh,'false']"
str = re.sub('^\[','',str)
str = re.sub('\]$','',str)
array = str.split("],[")
for line in array:
    print(line)
首先:

re.findall("[^,]+,[^,]+", a)
这将为您提供以下列表:

[class,'STOCK']
[symbol,'AAII']
诸如此类,然后您可以剪切括号

import re

s = "[class,'STOCK'],[symbol,'AAII'],[open,2.60],[high,2.70],[low,2.53],[close,2.60],[volume,458500],[date,'21-Dec-04'],[openClosePDiff,0.0],[highLowPDiff,0.067],[closeEqualsLow,'false'],[closeEqualsHigh,'false']"

m = re.findall(r"([a-zA-Z0-9]+),([a-zA-Z0-9']+)", s)
d= { x[0]:x[1] for x in m }

print d
如果您想要功能性单衬里,请使用:

map(lambda x:x[1:-1],re.findall(“[^,]+,[^,]+”,a))

第一部分每秒拆分一次
,映射(对于列表中的每个项目,使用
lambda
函数..)剪切括号。

从以下开始:

re.findall("[^,]+,[^,]+", a)
import re

s = "[class,'STOCK'],[symbol,'AAII'],[open,2.60],[high,2.70],[low,2.53],[close,2.60],[volume,458500],[date,'21-Dec-04'],[openClosePDiff,0.0],[highLowPDiff,0.067],[closeEqualsLow,'false'],[closeEqualsHigh,'false']"

m = re.findall(r"([a-zA-Z0-9]+),([a-zA-Z0-9']+)", s)
d= { x[0]:x[1] for x in m }

print d
这将为您提供以下列表:

[class,'STOCK']
[symbol,'AAII']
诸如此类,然后您可以剪切括号

import re

s = "[class,'STOCK'],[symbol,'AAII'],[open,2.60],[high,2.70],[low,2.53],[close,2.60],[volume,458500],[date,'21-Dec-04'],[openClosePDiff,0.0],[highLowPDiff,0.067],[closeEqualsLow,'false'],[closeEqualsHigh,'false']"

m = re.findall(r"([a-zA-Z0-9]+),([a-zA-Z0-9']+)", s)
d= { x[0]:x[1] for x in m }

print d
如果您想要功能性单衬里,请使用:

map(lambda x:x[1:-1],re.findall(“[^,]+,[^,]+”,a))

第一部分每秒拆分一次
,映射(对于列表中的每个项目,使用
lambda
函数..)剪切括号

import re

s = "[class,'STOCK'],[symbol,'AAII'],[open,2.60],[high,2.70],[low,2.53],[close,2.60],[volume,458500],[date,'21-Dec-04'],[openClosePDiff,0.0],[highLowPDiff,0.067],[closeEqualsLow,'false'],[closeEqualsHigh,'false']"

m = re.findall(r"([a-zA-Z0-9]+),([a-zA-Z0-9']+)", s)
d= { x[0]:x[1] for x in m }

print d
您可以在此处运行代码段:
http://liveworkspace.org/code/EZGav35美元


您可以在此处运行代码段:
http://liveworkspace.org/code/EZGav$35

输出是一个字符串列表?@Ofiris是的,输出是一个令牌列表,其中每个令牌都是一个字符串string@Dhara我尝试了一些我从SO获得的正则表达式,例如
print(re.findall('\[^\]*\]\\\\\\\\\\“[^\”]*\“\\\S+”,str))
。但这不起作用。输出是一个字符串列表?@Ofiris是的,输出是一个令牌列表,其中每个令牌都是一个字符串string@Dhara我尝试了一些我从SO获得的正则表达式,例如
print(re.findall('\[^\]*\]\\\\\\\\\\\“[^\”]*\“\\\S+”,str))
。但这不起作用。你给出的非正则表达式解决方案也是我的第一个想法。它不是很健壮,但是如果数据足够一致,那么读入它将有助于以更合理的格式重写它。你给出的非正则表达式解决方案也是我的第一个想法。它不是很健壮,但是如果数据足够一致,那么读入它将有助于以更合理的格式重写它。。