我不确定这是否是发布此内容的正确位置,并且对标题感到抱歉,但我正在将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组完美,但第三组到最后一组太贪婪并且将全部匹配
答案 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\-]*$)'