Como encontro vários valores na mesma linha em qualquer permutação usando o Notepad++?

Como encontro vários valores na mesma linha em qualquer permutação usando o Notepad++?

Estou usando o Notepad ++ e estou tentando encontrar uma maneira de pesquisar vários valores na mesma linha. A pesquisa regex não está funcionando para mim no momento, pois posso não saber em que ordem os valores estão.

Por exemplo, quero procurar uma linha de código que possua três valores específicos. Usar .*na busca regex não está funcionando pois você deve saber a ordem dos valores. É possível procurar essas linhas sem saber a ordem dos valores?

Em cada linha eu tenho talvez um log de negociação com 30 tags diferentes. Eu quero procurar 35=D, EUR/USD, 150=8. Quero apenas procurar entradas com todos os três valores presentes.

O problema que encontro é que a ordem dessas tags não é garantida, portanto, a pesquisa regex que uso abaixo nem sempre encontra cada entrada necessária.

35=D.*EUR/USD.*150=8

Responder1

Usandoolhe para frenteé muito mais eficiente e pode lidar com qualquer número de alternâncias sem aumentar a complexidade:

  • Ctrl+F
  • "Encontre o que":^(?=.*\b35=D\b)(?=.*\bEUR/USD\b)(?=.*\b150=8\b).+$
  • Verificar"Caso de compatibilidade"
  • Verificar"Envolver em torno"
  • Verificar"Expressão regular"
  • Desmarque " .corresponde à nova linha"
  • Find All in Current Document

Explicação:

^               # Beginning of line
  (?=           # Start positive lookaead, make sure we have after:
    .*          # 0 or more any character but newline
    \b          # Word boundary to be sure not matching 135=DATA
    35=D        # Literally
    \b          # word boundary
  )             # End lookahead
  (?=           # Start positive lookaead, make sure we have after:
    .*          # 0 or more any character but newline
    \b          # Word boundary
    EUR/USD     # Literally
    \b          # Word boundary
  )             # End lookahead
  (?=           # Start positive lookaead, make sure we have after:
    .*          # 0 or more any character but newline
    \b          # Word boundary
    150=8       # Literally
    \b          # Word boundary
  )             # End lookahead
  .+            # One or more any character but newline
$               # End of line

Captura de tela:

Insira a descrição da imagem aqui

Responder2

Para corresponder apenas às linhas onde existem todas as três strings, você pode usar o |operador alternativo e agrupar (...)seus padrões para construir uma regex para todas as permutações possíveis:

(35=D.*EUR/USD.*150=8)|(35=D.*150=8.*EUR/USD)|(EUR/USD.*150=8.*35=D)|(EUR/USD.*35=D.*150=8)|(150=8.*35=D.*EUR/USD)|(150=8.*EUR/USD.*35=D)

Uma versão legível com quebras de linha adicionadas:

(35=D.*EUR/USD.*150=8)|
(35=D.*150=8.*EUR/USD)|
(EUR/USD.*150=8.*35=D)|
(EUR/USD.*35=D.*150=8)|
(150=8.*35=D.*EUR/USD)|
(150=8.*EUR/USD.*35=D)

Isso corresponderia a todas as linhas onde uma combinação de 35=De EUR/USD( 150=8e possível texto intermediário) estivesse presente. Neste texto de exemplo, apenas as três últimas linhas teriam correspondência (botão "Localizar tudo no documento atual"):

some text 35=D
some text EUR/USD more text 150=8
some text 35=D more text EUR/USD more text 150=8
some text EUR/USD more text 35=D more text 150=8 more text
some text 150=8 more text EUR/USD 35=D more text


captura de tela

informação relacionada