发票包含单词Invoice,后面是发票顶部区域的发票号,例如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 regex提取发票号IN280625-3/4

(?si).*Invoice[\s_:.]+(?<anr>[^\s_]+).+

由于单词发票多次占用,因此组ANr返回最后匹配payment.如何获得第一场比赛?Word Invoice可能出现在不同单词组合的文本中,因此搜索模式无法增强.如何从单词invoice后的文本顶部获取第一个单词?

测试 case 为https://regex101.com/r/vvDZpU/1

如何迫使它返回IN280625-3/4而不是payment? .NET 8 RegExp.是否匹配此选项?

使用穿过文本顶部

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);

有效,但也许有更好的 Select .

推荐答案

您可以省略regex中的s标志以及.*.+部分,并使用Regex.Match来获得第一个出现的情况.

如果匹配中至少有一个数字,并且允许的字符是大写和大写A-Z、数字0-9和/-,则可以将regex更新为:

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

模式匹配:

  • (?i)不区分大小写匹配的内联修饰符
  • \bInvoice匹配前面有单词边界的单词Invoice
  • [ _:.]+匹配1+乘以任何列出的字符
  • (?<anr> Named group anr
    • [A-Z/-]*匹配0+乘以任何允许的字符(数字除外)
    • [0-9]匹配个位数
    • [A-Z0-9/-]*匹配0+任何允许的字符
  • )亲密小组和r
  • (?!\S)断言右侧的空白边界

看到C# demo.com/r/cqzM6M/1" rel="nofollow noreferrer">regex demo和C# demo

例如

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

Csharp相关问答推荐

我应该将新的httpReportMessage()包装在using声明中吗?

如何保持主摄像头视角保持一致?

如何从HttpContext获取请求正文

使用C#中的SDK在Microsoft Graph API上使用SubscribedSkus的问题

当用户右键单击文本框并单击粘贴时触发什么事件?

HttpClient 415不支持的媒体类型错误

如何将字符串变量传递给JObject C#-无法加载文件或程序集';System.Text.Json

什么时候接受(等待)信号灯?尽可能的本地化?

从另一个不同 struct 的数组创建Newtonsoft.Json.Linq.J数组

当我没有此令牌时,为什么语法报告EOF错误?

EF核心新验证属性`DeniedValues`和`StringCompison`不起作用

在try 使用访问服务器上的文件夹时,如何解决CORS错误.NET核心API

如何让游戏对象在切换场景时被销毁,但在开始新游戏时重新锁定

如何从Azure函数使用Graph API(SDK 5.35)中的[FindMeetingTimes]

KeyDown从我的文本框中删除输入,如何停止?

如何在一次数据库调用中为ASP.NET核心身份用户加载角色

如何对特定异常使用Polly重试机制?

将字符串类型日期输入(yyyy-mm-ddthh:mm:ss)转换为MM/dd/yyyy格式

在Visual Studio 2022中查找Xamarin模板时遇到问题

是否在异步方法中避免Span<;T>;.ToArray()?