Capturando uma instância de uma pesquisa regex

0

Estou tentando usar o Regex para pesquisar entre o início do relatório e o início do próximo relatório mais abaixo no mesmo arquivo, capturar o relatório como um todo e usá-lo para pesquisar duplicatas e removê-las.

Eles são divididos por CRLFs e eu pensei que era inteligente fazendo (\r\n).*(\r\n) para capturar relatório, localizar, excluir, repetir para o próximo relatório.

Quando eu faço (\r\n).*(\r\n) , ele captura do próximo CRLF para o último CRLF no arquivo.

Não posso, para minha vida, descobrir como limitar a pesquisa a apenas uma instância da primeira linha do relatório, as ~ 30 linhas do corpo e, em seguida, o final do relatório.

    
por Justin Jarrett 10.06.2017 / 10:28

1 resposta

1

o seu problema é que o ponto está combinando com a nova linha. tente desmarcar a caixa 'dot matches newline'. Que no notepad ++ pode não ser difícil de encontrar (veja o canto inferior esquerdo da caixa de diálogo edit..find do notepad ++). Eu não incluirei uma imagem porque você não colocou o notepad ++ em seu título e eu acho que é bom se a resposta não for manchada para parecer demasiado notepad ++ centric, e desnecessariamente notepad ++ centric. Outros programas que suportam regex, também possuem um ponto que combina com a nova linha que pode ser marcada ou desmarcada.

você pode experimentar outras pesquisas e ver se elas funcionam ou não. algumas funcionarão independentemente do ponto, por exemplo, se eles não usam ponto, ou se eles podem ter usado ponto, mas com, por exemplo, .*? , que usa um operador *? , então não combina muito. Outros exemplos de expressão regular requerem que a nova linha de pontos seja desmarcada. Então, também pode desmarcá-lo e apenas marcá-lo para ver se algum contraste. Você pode tentar este ^.*$ com pontos coincide com a nova linha não marcada. Ou o seu com ele desmarcado. Ou veja o que acontece com isso, um tipo de padrão da forma [^ X] * X, (isso é uma boa maneira de evitar o problema de, por exemplo, se você o fizer. * X então o * incluirá x, e você não Assim, você pode especificar tudo o que não é x, *, seguido de x), como \r\n[^\r\n]*\r\n ou [^\r\n]*\r\n try ^[^\r\n]*\r\n Observe que o cursor dentro de colchetes significa Não. Os colchetes externos correspondem à posição de correspondência no início da linha. Outra maneira é tentar *? especificamente .*? eg \r\n.*?\r\n .*? corresponder a alguns pontos possíveis. Então, .*?X irá corresponder a alguns caracteres, até X.

    
por 10.06.2017 / 10:56