Tengo una expresión regular aquí: https://rubular.com/r/3p9WVitnlZQU3i
Al hacer ping a la API de Slack, convierte las comillas en bloque en líneas individuales con > al comienzo de cada línea, incluso si hay varias líneas. Quiero envolverlos en blockquotes:
En caso de que el enlace caduque en algún momento en el futuro, aquí está la cadena de prueba que debe coincidir:
> This is a blockquote line testing a new line > 1- Another new blockquote section > 2- And this is part of the same blockquote > And this is the final line of this blockquote testing another > 1- Another new blockquote > 2- And the final line of the 3rd blockquoteY aquí está la expresión regular
^>.*La expresión regular funciona bien y estoy tratando de usar gsub u otro método para envolverlos en comillas para que el resultado final sea:
<blockquote>This is a blockquote line</blockquote> testing a new line <blockquote>1- Another new blockquote section 2- And this is part of the same blockquote And this is the final line of this blockquote</blockquote> testing another <blockquote>1- Another new blockquote 2- And the final line of the 3rd blockquote</blockquote> O incluso si eso es muy difícil, si solo envolviera cada línea que comenzó con > en las etiquetas de cotización en bloque estaría bien, ya que simplemente no puedo agregar un margen inferior y se verán como una cita grande.
Sinceramente, estoy un poco perdido, pero supongo que estoy tratando de hacer algo como esto:
wrap_in_blockquote = replace_backticks2.gsub('^>.*','<blockquote>/0</blockquote>')
Pero no tengo idea si necesito iterar a través de las coincidencias individualmente o esto hará eso o qué sintaxis debo usar ya que no estoy familiarizado con gsub y tuve problemas con la documentación. Cualquier ayuda apreciada.
Puedes usar
s = "> This is a blockquote line\ntesting a new line\n> 1- Another new blockquote section\n> 2- And this is part of the same blockquote\n> And this is the final line of this blockquote\ntesting another\n> 1- Another new blockquote\n> 2- And the final line of the 3rd blockquote" rx = /^>(.*)/ puts s.gsub(rx, '<blockquote>\1</blockquote>')Vea la demostración en línea de Ruby . Producción:
<blockquote> This is a blockquote line</blockquote> testing a new line <blockquote> 1- Another new blockquote section</blockquote> <blockquote> 2- And this is part of the same blockquote</blockquote> <blockquote> And this is the final line of this blockquote</blockquote> testing another <blockquote> 1- Another new blockquote</blockquote> <blockquote> 2- And the final line of the 3rd blockquote</blockquote>Detalles :
El ^>(.*) coincide con el inicio de una línea con ^ , luego coincide con > y luego captura en el Grupo 1 cualquier cero o más caracteres que no sean caracteres de salto de línea tantos como sea posible con (.*) , donde los paréntesis crean un grupo de captura con ID 1 (por lo tanto, \1 se usa en el patrón de reemplazo para volver a colocar el valor del grupo en la cadena resultante).
Tenga en cuenta las comillas simples en el literal de cadena de patrón de reemplazo; si usa comillas dobles, deberá duplicar las barras invertidas.
A veces es más fácil usar código en lugar de una expresión regular muy compleja. Será más legible y luego, si necesita cambiar algo, usted o sus colegas se lo agradecerán.
text = DATA.read block = "<blockquote>" text.each_line do |line| if line[/^>/] block << line.sub(/^>/,"") else unless block=="<blockquote>" puts "#{block.chomp}</blockquote>" block = "<blockquote>" end puts line end end puts block.chomp << "</blockquote>" unless block=="<blockquote>"Que da lo que pediste
<blockquote> This is a blockquote line</blockquote> testing a new line <blockquote> 1- Another new blockquote section 2- And this is part of the same blockquote And this is the final line of this blockquote</blockquote> testing another <blockquote> 1- Another new blockquote 2- And the final line of the 3rd blockquote</blockquote>Ver aquí para una demostración de trabajo