Python常规扩展帮助

时间:2018-10-29 07:01:19

标签: python regex python-3.x

对不起,通用标题。

我有这段文字:

----------------------------------------------- One Errors ------------------------------------------------------
VALUES1                  64        0     0.00
VALUES2                   0        0     0.00
VALUES3                2535        0     0.00
VALUES4                   0        0     0.00
    ALL                2674     2674   100.00     5.31     3.60     4.70     5.70     8.30    10.80    20.90    27.50    31.10    36.53  [Free Text]

-----------------------------------------------Two Errors ------------------------------------------------------
VALUES1                  64        0     0.00
VALUES2                   0        0     0.00
VALUES3                2535        0     0.00
VALUES4                   0        0     0.00
    ALL                2674        0     0.00

-----------------------------------------------Three Errors ------------------------------------------------------
VALUES1                  64        0     0.00
VALUES2                   0        0     0.00
VALUES3                2535        0     0.00
VALUES4                   0        0     0.00
    ALL                2674     2674   100.00     1.51     0.70     1.10     1.60     3.30     4.50     5.40     6.40     9.50    12.17  [Free Text]

-----------------------------------------------Four Errors ------------------------------------------------------
VALUES1                  64        0     0.00
VALUES2                   0        0     0.00
VALUES3                2535        0     0.00
VALUES4                   0        0     0.00
    ALL                2674     2674   100.00     0.34     0.10     0.17     0.27     0.67     1.10     1.48     1.97     2.32     3.12  [Free Text]

-----------------------------------------------Five Errors ------------------------------------------------------
VALUES1                  64        0     0.00
VALUES2                   0        0     0.00
VALUES3                2535        0     0.00
VALUES4                   0        0     0.00
    ALL                2674        0     0.00

VALUES1                  64        0     0.00
VALUES2                   0        0     0.00
VALUES3                2535        0     0.00
VALUES4                   0        0     0.00
    ALL                2674     2674   100.00     0.00     0.00     0.00     0.00     0.00     0.00     0.00     0.00     0.00     0.00  [Free Text]

VALUES1                  64        0     0.00
VALUES2                   0        0     0.00
VALUES3                2535        0     0.00
VALUES4                   0        0     0.00
    ALL                2674        0     0.00

如您所见,在某些情况下,我有一行(以ALL开头)包含14列 有时只有3个(不包括“ ALL”值)。

我需要从每行中抓取以“ ALL”开头的第3、6、8、10、13列,并在此部分中包含值。

例如:

“一个错误”部分:100.00、4.70、8.30、20.90、36.53

“两个错误”部分中的值:0.00,无,无,无,无

我正在尝试使用 在“五个错误”部分中:100.00、0.00、0.00、0.00、0.00

我正在尝试使用此正则表达式:

 Tow Errors[\s\S]*?ALL\s+\S+\s+\S+\s+(\S+)\s+\S+\s+\S+\s+(\S+)\s+\S+\s+(\S+)\s+\S+\s+(\S+)\s+\S+\s+\S+\s+(\S+).*?$

还有

 Tow Errors[\s\S]*?ALL\s+[0-9\.]+?+\s+[0-9\.]+?\s+([0-9\.]+?)\s+[0-9\.]+?\s+[0-9\.]+?\s+([0-9\.]+?)\s+[0-9\.]+?\s+([0-9\.]+?)\s+[0-9\.]+?\s+([0-9\.]+?)\s+[0-9\.]+?\s+[0-9\.]+?\s+([0-9\.]+?).*?$

显然我在这里做错了,需要您的建议 谢谢:)

2 个答案:

答案 0 :(得分:0)

不含正则表达式。使用简单的迭代。

例如:

result = []
with open(filename) as infile:
    for line in infile:                    #Iterate Each line
        line = line.strip()                #Strip start and end space
        if line.startswith("ALL"):         #Check if line starts with "ALL"
            temp = []
            val = line.split()              #Split by space
            temp.append(val[3])             #Get Required values
            for i in [6, 8, 10, 13]:
                try:
                    temp.append(val[i])
                except:
                    temp.append(None)
            result.append(temp)
print(result)

输出:

[['100.00', '4.70', '8.30', '20.90', '36.53'],
 ['0.00', None, None, None, None],
 ['100.00', '1.10', '3.30', '5.40', '12.17'],
 ['100.00', '0.17', '0.67', '1.48', '3.12'],
 ['0.00', None, None, None, None],
 ['100.00', '0.00', '0.00', '0.00', '0.00'],
 ['0.00', None, None, None, None]]

答案 1 :(得分:0)

尝试一下:

regex = 'ALL(?:[ \t]+\S+){2}([ \t]+\S+)?(?:(?:[ \t]+\S+){2}([ \t]+\S+)?)?(?:(?:[ 
\t]+\S+)([ \t]+\S+)?)?(?:(?:[ \t]+\S+)([ \t]+\S+)?)?(?:(?:[ \t]+\S+){2}([ \t]+\S+)?)?'

re.findall(regex, string)