Se grupos que não corresponde ao padrão especificado

votos
0

Eu estou trabalhando em C # para recuperar sub cordas de uma cadeia especificada.

Ex: Eu tenho uma string assim:

\ A {Doc Título} \ aDoc ID \ RDOC Data \ RDOC Versão Estado \ RDOC \ a: \ r: \ r: \ r: \ a {DocID} \ r {DocDate} \ r {DocVersion} \ r {DocStatus} \ a \ a \ r

Então eu quero pegar todas as cadeias sub entre \ a \ r, \ a: \ r: \ r: \ r: \ a ... Eu já criou um padrão para combinar com todos \ a , \ r, ... como abaixo:

((\\a[:]{0,1})+|(\\r[:]{0,1})+)+

O problema é: como posso obter todos os sub string que não corresponde aos padrões acima?

resultado esperado é: {Doc Título}, ID Doc, Doc data, ...

Publicado 20/09/2018 em 04:36
fonte usuário
Em outras línguas...                            


1 respostas

votos
2

Primeiro de tudo, por favor, encurtar a sua regex.

  • {0,1} é ?
  • [:] e simples :

Versão Shortend do seu regex é (\\[ar]:?)+. Este regex allowes retrocesso o que o torna mais difícil de usar em uma operação de divisão. Evitá-lo usando um grupo atômica: (?>\\[ar]:?)+E agora você pode dividir sua seqüência para obter todas as outras cordas e filtrar cadeias vazias:

var input = @"\a{Doc Title}\aDoc ID\rDoc Date\rDoc Version\rDoc Status\a:\r:\r:\r:\a{DocID}\r{DocDate}\r{DocVersion}\r{DocStatus}\a\a\r";
var pattern = @"(?>\\[ar]:?)+";
var items = Regex.Split(input, pattern);
foreach (var item in items)
    if (!string.IsNullOrWhiteSpace(item))
        Console.WriteLine(item);

DEMONSTRA

Respondeu 20/09/2018 em 04:58
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more