[英]need to find python regex to get only the last digit
我有一个巨大的 pdf 是发票页面上的所有非常基本的文本,我需要创建一个或 2 个正则表达式,所以当我拆分它时,我会得到客户编号和发票编号以在文件名中使用。 我目前正在使用 python 3 和 pypdf2
2页的文本示例:
Detailed Invoice Report
Starting 8/12/2015 and ending 8/11/2022
Company: (Multiple Companies) Printed by Robert S on 8/11/2022 1:26:46PM
Donna Contact Cust# Name: Customer A 1234
Customer A Invoice Date Invoice Name 8/12/2015 241849
Item Description Qty Price Extended Price
Credit ($810.00) 1 ($810.00) 1
Due Paid Total Total Taxes Subtotal
($810.00) ($810.00) $0.00 ($810.00)
Balance: ($810.00) $0.00 $0.00
8/11/2022 1:26:46PM Page 1 of 340977
Detailed Invoice Report
Starting 8/12/2015 and ending 8/11/2022
Company: (Multiple Companies) Printed by Robert S on 8/11/2022 1:26:46PM
Customer B Cust# Name: Customer B 45678
Customer B Invoice Date Invoice Name 8/12/2015 241850
Item Description Qty Price Extended Price
credit ($49.99) 1 ($49.99) 1
Due Paid Total Total Taxes Subtotal
($49.99) ($49.99) $0.00 ($49.99)
Balance: ($49.99) $0.00 $0.00
8/11/2022 1:26:46PM Page 2 of 340977
目前我有这 2 个正则表达式过滤器来获取每一种,但我不知道如何只保留最后一组匹配。 注意:如果客户名称中有一个数字,那么 firstmatch 正则表达式会被破坏,这是一种边缘情况,但在数据中并不少见
firstmatch=r"(Name:)(\D*)(\d+)"
secondmatch=r"(Name )(\d*.\d*.\d*..)(\d*)"
每个都是自己的页面,我希望正则表达式能够从第一个 1234 241849 和第二个 45678 241850 中提取
您可以使用匹配行中最后一位数字的捕获来获取这两个值。
对于第一个模式:
\bName:.*?\b(\d+)[^\d\n]*$
解释
\bName:
匹配Name:
前面有单词边界.*?
尽可能少地匹配任何没有换行符的字符\b(\d+)
一个单词边界,然后在第 1 组中捕获 1+ 个数字[^\d\n]*
可选匹配除数字或换行符以外的任何字符$
字符串结尾对于第二种模式,您可以使其更具体一些,其中[^\S\n]+
匹配 1+ 个空白字符而没有换行符:
\bName[^\S\n]+\d+/\d+/\d+[^\S\n]+(\d+)[^\d\n]*$
或者,如果这些行彼此紧随其后,您还可以使用 1 个模式和 2 个捕获组,并匹配第一行末尾的换行符:
\bName:.*?\b(\d+)[^\d\n]*\n\b.*?Name[^\S\n]+\d+/\d+/\d+[^\S\n]+(\d+)[^\d\n]*$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.