什么正则表达式与这些行匹配?

2024-04-25 10:21:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我不确定这是否是正确的地方张贴这篇文章,并为标题抱歉,但我正在解析一个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组完美,但第三到最后一组太贪婪,将匹配所有


Tags: csvname标题标准pdfmy格式地方
1条回答
网友
1楼 · 发布于 2024-04-25 10:21:45

多亏了@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\-]*$)'

相关问题 更多 >