的我试图从像输入捕获数据:正则表达式捕获不同类型的模式
...
10 79 QUANT. DE ITENS A FORNECER O N 9 0 67 75
E' a quantidade de itens que o fornecedor consegue suprir
o cliente para uma determinada data. As casa decimais estao
definidas no campo 022 (unid. casas decimais).
11 24 DATA ENTREGA/EMBARQUE DO ITEM O N 6 0 76 81
Data de entrega/embarque do item. Nos casos em que este cam-
po nao contiver a data, seu conteudo devera ser ajustado en-
tre as partes.
...
我的目标是捕获: (“10”,“79”,“QUANT DE ITENS一个FORNECER ','O','N','9','0','67',75')等等...
我的第一次尝试是循环过去并捕获如下:
def parse_line(line):
pattern = r"\s(\d{1,6}|\w{1})\s" # do not capture the description
if re.search(pattern, line):
tab_find = re.findall(pattern, line, re.DOTALL|re.UNICODE)
if len(tab_find) > 6:
return tab_find
我的第二次尝试是拆分文本并追加预期结果:
def ugly_parsing(line):
result = [None] * 9 # init list
tab_r = list(filter(None, re.split(r"\s", line))) # ignore ''
keys = [0, 1, -1, -2, -3, -4, -5, -6]
for i in keys:
result[i] = tab_r[i]
result[2] = " ".join(tab_r[2:-6])
return result
忽略描述是好的,但是当描述包含单个字母时,我的正则表达式不起作用。
为什么不在一个以上的空间分割,即'r'\ s {2,}''?或者他们是制表符? – jonrsharpe
请确定你需要什么输出。目前还不清楚(*等)*。 –
@jonrsharpe,不错的选择! –