正则表达式会匹配这些行吗?

时间:2018-01-19 06:10:32

标签: python regex

我不确定这是否是发布此内容的正确位置,并且对标题感到抱歉,但我正在将PDF解析为CSV并且由于不稳定而我决定使用每行的正则表达式格式。

我已添加,以表示匹配应该在哪里。如果你拿出来,那就是原始字符串。第一行是标准,其他是错误列可以显示的一些方法。看一下正则表达式是一种很好的暗示

需要匹配:

12,      16:00:30,  P,  14,     ______________  ABC12345678,          N,     
JOE B'obby,                    MY COMPANY-23 / NAME,                  23,  2


212,      14:00:30,,    212,     ______________  ABC12345678,          NCh,     
BOB Joe Joe,                    MY NAME,                  300,    12,      


2,      13:00:30,  P,  2,     ______________  ABC12345678,,          BOB 
Joe °,,, 20    


3,      15:15:00,  P,  132,     ______________  ABC12345678,,          PHO
Guy Guy °,,,,    

这是我到目前为止所做的。

    sl_re = r'(\d+)' \
        r'[ ]+(\d+:\d+:\d+)' \
        r'[ ]+([P]*)' \
        r'[ ]+(\d+)' \
        r'[ ]+([_ ]+[A-Z]+\d+)' \
        r'[ ]+([A-Za-z]{,3}|[ ])' \
        r'[ ]+([\w\']+[ ][\w\'°]+[ ]{,1}[\w\'°]*[ ]{,1}[\w\'°]*)'\
        r'[ ]*([\w\-/ ]*|[ ])' \
        r'[ ]*(\d*|[ ])' \
        r'[ ]*(\d*$)'     

它匹配所有内容直到最后3组完美,但第三组到最后一组太贪婪并且将全部匹配

1 个答案:

答案 0 :(得分:0)

感谢@tripleee的帮助,我找到了解决问题的方法。正如他所说,这个问题只是更加明确。

因为有很多可选和不可预见的组合需要*(0或更多),所以确保它们尽可能不贪婪是很重要的。只有在我希望它们能够匹配它们可能的所有内容(组之间的空格)时才使用贪婪搜索,而当我希望它在下一个匹配时停止时,它们会非贪婪。很基本,但这是一个很好的学习机会!

只有最后几行改变了,添加了几个字符,我发现需要通过测试用例:

r'([\d\.]+)'
r'[ ]+(\d+:\d+:\d+)'
r'[ ]+([P]*)'
r'[ ]+(\d+)'
r'[ ]+([_ ]+[A-Z]+\d+)'
r'[ ]+([NWCSLh]{,3}|[ ])'
    r'[ ]+([\w\'\-]+[ ]*?[\w©\'\-°]+[ ]*?[\w\'\-°]*'
    r'[ ]*?[\w\'\-°]*[ ]*?[\w\'\-°]*)'
r'[ ]*([A-Z0-9,\'\-\/ \.]*?)'
r'[ ]*([\d\-]*?)'
r'[ ]*([\d\-]*$)'
相关问题