Existe alguma maneira de fazer com que o Visual Studio execute uma substituição regex em várias linhas (deixe que os limites das linhas cruzadas correspondam)? Sei que há muitos editores que posso usar para isso, mas parece estranho que esse recurso tenha sido deixado de fora do Visual Studio. Estou esquecendo de algo?
fonte
end
) para que não seja ganancioso. ou seja:start(.*\n)*.*?end
start
eend
. Se você quiser encontrar o próximo,end
use a versão não gananciosa:,(?s)start.*?end
oustart(.*\n)*?.*?end
.(?s)
?As expressões regulares mudaram no Visual Studio 2013 . https://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.120).aspx
Para corresponder a uma expressão em duas linhas, o código agora seria:
StartOfExpression.*\r?\n.*EndOfExpression
fonte
</label>.*\r?\n.*<div
onde\r?\n
está a óbvia charge_return-new_line e.*
por combinar as tabs / espaços possíveisIsso funciona hoje no Visual Studio 2012:
fooPatternToStart.*(.*\n)+?.*barPatternToEnd
Veja como a
(.*\n)+?
peça faz a correspondência em várias linhas, não gananciosa.fooPatternToStart
é algum padrão regex em sua linha de partida, enquantobarPatternToEnd
é seu padrão para encontrar em outra linha abaixo, possivelmente muitas linhas abaixo ...Exemplo encontrado aqui .
Simples e eficaz :)
Nota: antes do VS2012, o padrão que funcionava era:
fooPatternToStart.(.\n)+@.*barPatternToEnd
fonte
sprintf.*(.*\n)+?.*log.*(.*\n)+?.*__func__
funciona para pesquisarlog
entresprintf
e__func__
, obrigado! Tho .. parece olhar para o infinito para isso .. se ao menos houvesse uma maneira de limitar a quantidade de linhasObservação: esta resposta está usando a sintaxe regex usada no Visual Studio até e incluindo o VS 2012. No VS 2013 e posterior, a sintaxe regex foi alterada.
Você pode incluir
\n
na expressão. Como exemplo, aqui está um regex que eu uso para "limpar" scripts SQL gerados automaticamente de qualquer coisa que não seja um procedimento armazenado (ele corresponderá a blocos de texto que começam com uma linha contendo "Objeto:" seguido por algo que não é "StoredProcedure", em seguida, combinar as seguintes linhas até uma linha consiste na palavra "GO"):/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n
fonte
você pode precisar usar \ r \ n no final de sua expressão.
fonte
Qualquer captura de caractere multilinha não gananciosa, Visual Studio 2013+:
.*?\r?\n.*?
Versão gananciosa na resposta de Giles Roberts.
fonte
Para todos que vêm aqui enquanto procuram pelo Código VS, eu uso isso para fazer a correspondência de qualquer coisa de
script
qualquer lugar com 2 novas linhas (excluídas as novas linhas):script(.|\n)+?(?=\n\n)
substituir
script
e\n\n
combinar tudo entre eles.fonte