如何从顶部提取发票号码作为单词发票后的第一个匹配项

问题描述 投票:0回答:1

发票包含单词“发票”,后跟发票编号,如发票顶部区域中的

IN280625-3/4

Payer:_xxxxxxx
Waybill Invoice_IN280625-3/4 Nimetus_EAN  
Invoice issuer: John
Selle Invoice tasumisel_palume m lisada Kesolev Invoice on poolte
vahel Invoice mittetähtaegsel tasumisel on müüjal õigus nõuda viivist 0,1% tasumata summalt päevas.
Kuni Invoice_IN280625-3/4 payment xxx

使用 c# .NET 8 正则表达式提取发票号码

IN280625-3/4

(?si).*Invoice[\s_:.]+(?<anr>[^\s_]+).+
to group anr 返回最后一个匹配项 

payment

,因为“invoice”一词多次出现。如何获得第一场比赛?单词发票可能出现在具有不同单词组合的文本中,因此无法增强搜索模式。如何从单词顶部的文本顶部获取第一个单词
invoice

测试用例位于

https://regex101.com/r/vvDZpU/1

如何强制它返回

IN280625-3/4

而不是
payment
?
.NET 8 RegExp.Match 有这样的选项吗?

使用

传递文本顶部

var algus = tekst.IndexOf("Invoice", StringComparison.InvariantCultureIgnoreCase); var tekst2 = tekst.Substring(algus, algus + 40); var cnr2 = @"(?si).*Invoice[\s_:.]+(?<anr>[^\s_]+).+"; var match = RegExp.Match(tekst2, cnr);
可行,但也许有更好的选择。

c# regex pattern-matching match regex-group
1个回答
0
投票
您可以省略正则表达式中的

s

 标志以及 
.*
.+
 部分,并使用 
Regex.Match 来获取第一个匹配项。

如果匹配中至少应有一个数字,并且允许的字符为大写和小写 A-Z、数字 0-9 和

/

-
,您可以将正则表达式更新为:

(?i)\bInvoice[ _:.]+(?<anr>[A-Z/-]*[0-9][A-Z0-9/-]*)(?!\S)
模式匹配:

  • (?i)
     不区分大小写匹配的内联修饰符
  • \bInvoice
     匹配前面有单词边界的单词 
    Invoice
  • [ _:.]+
  • 匹配任意列出的字符 1 次以上
  • (?<anr>
  • 命名组
    anr
      [A-Z/-]*
    • 匹配 0+ 次任何允许的字符(数字除外)
    • [0-9]
    • 匹配单个数字
    • [A-Z0-9/-]*
    • 匹配 0+ 次任何允许的字符
      
      
  • )
  • 关闭群组anr
  • (?!\S)
  • 在右侧断言空白边界
    
    
  • 查看
regex 演示

C# 演示 例如

string pattern = @"(?i)\bInvoice[ _:.]+(?<anr>[A-Z/-]*[0-9][A-Z0-9/-]*)(?!\S)"; string input = @"Payer:_xxxxxxx Waybill Invoice_5IN280625-3/4 Nimetus_EAN Invoice issuer: John Selle Invoice tasumisel palume m lisada Kesolev Invoice on poolte vahel Invoice mittetähtaegsel tasumisel on müüjal õigus nõuda viivist 0,1% tasumata summalt päevas. Kuni Invoice Second280625-3/4 sumiseni k"; Match m = Regex.Match(input, pattern); if (m.Success) { Console.WriteLine(m.Groups["anr"]); }

输出

5IN280625-3/4

© www.soinside.com 2019 - 2024. All rights reserved.