A fatura contém a palavra Fatura seguida do número da fatura, como IN280625-3/4
na área superior da fatura:
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
Extraindo o número da fatura IN280625-3/4
usando c# .NET 8 regex
(?si).*Invoice[\s_:.]+(?<anr>[^\s_]+).+
para agrupar anr retorna a última correspondência, payment
pois há múltiplas ocorrências de palavra fatura. Como conseguir a primeira partida? A fatura do Word pode ocorrer em texto com combinação de palavras diferentes, portanto o padrão de pesquisa não pode ser aprimorado. Como obter a primeira palavra do topo do texto após palavra invoice
?
O caso de teste está em https://regex101.com/r/vvDZpU/1
Como forçá-lo a retornar IN280625-3/4
em vez de payment
? O .NET 8 RegExp.Match tem essa opção?
Passando no topo do texto usando
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);
Funciona, mas talvez haja uma opção melhor.
Você pode omitir o
s
sinalizador e as partes.*
e.+
no regex e usar Regex.Match para obter a primeira ocorrência.Se houver pelo menos um único dígito na correspondência e os caracteres permitidos forem AZ maiúsculos e minúsculos, dígitos de 0 a 9 e
/
/ou-
você poderá atualizar o regex para:O padrão corresponde:
(?i)
Modificador embutido para uma correspondência que não diferencia maiúsculas de minúsculas\bInvoice
Combine a palavraInvoice
precedida por um limite de palavra[ _:.]+
Combine 1+ vezes qualquer um dos caracteres listados(?<anr>
Grupo nomeadoanr
[A-Z/-]*
Combine 0+ vezes qualquer um dos caracteres permitidos, exceto um dígito[0-9]
Corresponder a um único dígito[A-Z0-9/-]*
Combine 0+ vezes qualquer um dos caracteres permitidos)
Fechar grupo anr(?!\S)
Afirme um limite de espaço em branco à direitaVeja uma demonstração de regex e uma demonstração de C#
Por exemplo
Saída