【问题标题】:Regexp to match number after carriage return with text inbetween正则表达式在回车后匹配数字,中间有文本
【发布时间】:2019-03-21 11:50:12
【问题描述】:

有没有办法在字符串中匹配这样的模式?

模式(不区分大小写):"\bfactuur(nummer)" **OR** "Nr." **OR** "Nr(:)" 后跟实际值 "\d+" OR "d{3,4} - d{3,4}"

很高兴拥有(如果它实际上不是超现实的):"Factuur\n" 忽略"Nr." "\d+" 之间的所有内容。

测试日期:

Factuur: 2018-4005 

Factuur

Nr. 90424571 

 Factuurnummer: 2019-010

 factuur : 281319261

factuurnummer: 63

Factuurnummer: 281319264565

Factuur assdg 236373

   Factuurnummer 281319265

Factuurnummer 0723 - 1345

Factuur nr. 180262

Factuurnummer : 6322232

演示正则表达式:

https://regex101.com/r/PuGrqn/37

【问题讨论】:

    标签: regex invoice


    【解决方案1】:

    您的正则表达式只需进行两项更改即可使其适用于您的所有示例。你可以使用这个正则表达式,

    \bfactuur(?:nummer|\n)?.*?(?<=\s)(\d+(?:\s*-\s*\d+)?)(?=\s|$)
    

    Check online demo

    这是我所做的两个更改,

    • 如果除了nummer 之外,factuur 可以紧跟换行符,那么只需将\nnummer 交替放置
    • (\d+) 增强为(\d+(?:\s*-\s*\d+)?),使其不仅可以匹配数字,还可以选择匹配一些可选的空格,然后是连字符,然后是一些可选的空格,最后跟一个数字,这就是为什么我在之后添加(?:\s*-\s*\d+)? \d+

    希望这能解决问题。如果您还有任何不匹配的样本,请告诉我。

    编辑:用于捕获这样的字符串

    Factuurnummer Factuurdate 1234 3-21-2019
    

    可以使用此正则表达式增强该模式以捕获由空格或连字符分隔的多个数字,

    \bfactuur(?:nummer|\n)?.*?(?<=\s)(\d+(?:\s*-?\s*\d+)*)(?=\s|$)
    

    Check this demo with additional sample data

    【讨论】:

    • thnx,我试图弄清楚如何使用正则表达式使字符串工作变得非常可靠。我有各种字符串,factuurnummer 是我要提取的字段之一。在那个特定的用例中它可以工作,尽管我猜其他字符串可能存在一些障碍,这意味着我总是必须调整模式。这里有什么解决方法吗?初始 PDF 中可能有表格,但输出字符串将逐行打印。所以在这种情况下,它看起来像这样:Factuurnummer Factuurdate 1234 3-21-2019
    • @rumba:我理解有时文本数据很大并且您不确定如何匹配/过滤您想要的数据。但我想您要么需要说明所有情况下数据存在的理由,以便制定规则以提出适当的正则表达式,要么您可能必须提供足够的样本来涵盖所有情况。如果您了解正则表达式的基础知识,您也可以自己进行一些调整,对于其他人,我可以帮助您。这应该是一个好方法,因为这也会提高你的技能。
    • 我正在寻找将“Factuurbedrag”添加到现有正则表达式以在其之前搜索值的方法。 factuurbedrag = 总计。这是要搜索 Totaal (regex101.com/r/PuGrqn/41) 的那个,我不希望它保持不变。这是 Factuurbedrag (regex101.com/r/PuGrqn/42) 的正则表达式,它也会在 factuurbedrag 之后错误地输出所有内容。如何导入它并添加到主要 - 总模式?
    • @rumba:我不确定我是否得到你的问题,但你想在你输入中提到的所有情况下捕获数字吗? Check This 在这里它捕获之前或之后的数字,无论是totaal 还是Factuurbedrag。如果这是您想要的,请告诉我。
    • 这正是我想弄清楚的,感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 2021-02-14
    相关资源
    最近更新 更多