Ruby-gsub br标记为\n\n用于API,但包括任何空格

Ruby-gsub br标记为\n\n用于API,但包括任何空格,ruby,regex,gsub,Ruby,Regex,Gsub,我的客户端数据中有标记,我需要在Rails API中为React本机应用程序替换这些标记 有时在标记之前或之后有空格,或者两者都有 我正在寻找一个gsub来表示“any标记,并在其前后包含任何空格,替换为“\n\n” 现在我正在做: module ApiHelper def parse_newlines(string) string = string.gsub('<br>', '\n\n') string = string.gsub(' <br>',

我的客户端数据中有

标记,我需要在Rails API中为React本机应用程序替换这些标记

有时在

标记之前或之后有空格,或者两者都有

我正在寻找一个
gsub
来表示“any

标记,并在其前后包含任何空格,替换为“\n\n”

现在我正在做:

module ApiHelper
  def parse_newlines(string)
    string = string.gsub('<br>', '\n\n')
    string = string.gsub(' <br>', '\n\n')
    string = string.gsub('<br> ', '\n\n')
    string = string.gsub(' <br> ', '\n\n')
  end
end
模块ApiHelper
def parse_换行符(字符串)
string=string.gsub(“
”,“\n\n”) string=string.gsub(“
”,“\n\n”) string=string.gsub(“
”,“\n\n”) string=string.gsub(“
”,“\n\n”) 结束 结束
有更干净的吗

编辑:谢谢大家。我想接受加文和铁皮人的答案……加文因为他给了我一个低劣而肮脏的解决方案,但铁皮人用Nokogiri以一种更有力的方式给出了如此出色/深入的解释

第二次编辑:我收回它。铁皮人…使用Nokogiri实际上更具可读性。你关于在评论中使用正则表达式的论点是有效的。最终你的代码更容易理解。即使我现在使用的是Gavin的,给你一个可接受的答案。

这样就可以了:

module ApiHelper
  def parse_newlines(string)
    # Handles <br>, <br/>, <br />
    string.gsub(/\s*<br\s*?\/?>\s*/, "\n\n")
  end
end

# irb
> parse_newlines("     <br>      ")
=> "\n\n"
> parse_newlines("     <br />      ")
=> "\n\n"
> parse_newlines("<br />")
=> "\n\n"
模块ApiHelper
def parse_换行符(字符串)
#句柄


string.gsub(/\s*\s*/,“\n\n”) 结束 结束 #内部评级 >解析新行(“
”) =>“\n\n” >解析新行(“
”) =>“\n\n” >解析新行(“
”) =>“\n\n”
这样就可以了:

module ApiHelper
  def parse_newlines(string)
    # Handles <br>, <br/>, <br />
    string.gsub(/\s*<br\s*?\/?>\s*/, "\n\n")
  end
end

# irb
> parse_newlines("     <br>      ")
=> "\n\n"
> parse_newlines("     <br />      ")
=> "\n\n"
> parse_newlines("<br />")
=> "\n\n"
模块ApiHelper
def parse_换行符(字符串)
#句柄


string.gsub(/\s*\s*/,“\n\n”) 结束 结束 #内部评级 >解析新行(“
”) =>“\n\n” >解析新行(“
”) =>“\n\n” >解析新行(“
”) =>“\n\n”
您可以尝试:

string = 'Lorem <br> Ipsum'
puts string.gsub(/\s(<br>)\s/, '\n\n')
# => Lorem\n\nIpsum
puts string.gsub(/\s(<br>)\s/, "\n\n")
# Lorem
# 
# Ipsum
string='Lorem
Ipsum' 放置字符串.gsub(/\s(
)\s/,“\n\n”) #=>Lorem\n\nIpsum 放置字符串.gsub(/\s(
)\s/,“\n\n”) #洛勒姆 # #Ipsum
请注意
'\n\n'
“\n\n”

之间的区别,您可以尝试:

string = 'Lorem <br> Ipsum'
puts string.gsub(/\s(<br>)\s/, '\n\n')
# => Lorem\n\nIpsum
puts string.gsub(/\s(<br>)\s/, "\n\n")
# Lorem
# 
# Ipsum
string='Lorem
Ipsum' 放置字符串.gsub(/\s(
)\s/,“\n\n”) #=>Lorem\n\nIpsum 放置字符串.gsub(/\s(
)\s/,“\n\n”) #洛勒姆 # #Ipsum
请注意
'\n\n'
“\n\n”

模块之间的区别
def parse_换行符(字符串)
string.gsub(/\s*
\s*/,“\n\n”) 结束 结束
模块ApiHelper
def parse_换行符(字符串)
string.gsub(/\s*
\s*/,“\n\n”) 结束 结束
在处理HTML或XML时,最好使用解析器。我从以下内容开始:

require 'nokogiri'

doc = Nokogiri::HTML::DocumentFragment.parse(<<EOT)
<p>this<br>is<br> some <br>
text<br>and<br >some<br/>more</p>
EOT

doc.search('br').each { |br| br.replace("\n\n") }
doc.to_html
# => "<p>this\n" +
#    "\n" +
#    "is\n" +
#    "\n" +
#    " some \n" +
#    "\n" +
#    "\n" +
#    "text\n" +
#    "\n" +
#    "and\n" +
#    "\n" +
#    "some\n" +
#    "\n" +
#    "more</p>\n"
需要“nokogiri”
doc=Nokogiri::HTML::DocumentFragment.parse(“this\n”+
#“\n”+
#“是\n”+
#“\n”+
#“一些\n”+
#“\n”+
#“\n”+
#“文本\n”+
#“\n”+
#“和\n”+
#“\n”+
#“一些\n”+
#“\n”+
#“更多信息

\n”

注意:从技术上讲,

相当于一个“\n”,而不是“\n\n”。
将是两行新行,因为这构成了一个段落。

当处理HTML或XML时,最好使用解析器。我首先:

require 'nokogiri'

doc = Nokogiri::HTML::DocumentFragment.parse(<<EOT)
<p>this<br>is<br> some <br>
text<br>and<br >some<br/>more</p>
EOT

doc.search('br').each { |br| br.replace("\n\n") }
doc.to_html
# => "<p>this\n" +
#    "\n" +
#    "is\n" +
#    "\n" +
#    " some \n" +
#    "\n" +
#    "\n" +
#    "text\n" +
#    "\n" +
#    "and\n" +
#    "\n" +
#    "some\n" +
#    "\n" +
#    "more</p>\n"
需要“nokogiri”
doc=Nokogiri::HTML::DocumentFragment.parse(“this\n”+
#“\n”+
#“是\n”+
#“\n”+
#“一些\n”+
#“\n”+
#“\n”+
#“文本\n”+
#“\n”+
#“和\n”+
#“\n”+
#“一些\n”+
#“\n”+
#“更多信息

\n”

注意:从技术上讲,

相当于一个“\n”,而不是“\n\n”。
将是两行新行,因为这构成了一个段落。

请阅读“”。提供一个有效的、最低限度的代码示例以及必要的输入(最低限度的HTML)这就说明了问题所在。要求我们创建HTML浪费了我们的时间,也减慢了我们帮助您和其他人的速度。可能会遇到



或更糟的情况。不要使用正则表达式或字符串操作来更改HTML;这会让您发疯。请阅读“。提供一个有效的、最少的代码示例以及必要的输入(最少的HTML)这就说明了问题所在。要求我们创建HTML浪费了我们的时间,也减慢了我们帮助您和其他人的速度。可能会遇到



或更糟的情况。不要使用正则表达式或字符串操作来更改HTML;这会让您发疯。而是使用解析器。感谢所有这些详细信息!是的,我意识到我需要两行而不是一行。数据来自客户机的word/excel,他们有这些符号,起初我错误地用一个
标记替换了这些符号。然后意识到我不能在react native中使用
标记,我需要使用/n。然后意识到我实际上需要两个/n。Nokogiri看起来很不错。我可能已经我想稍后再做一些更健壮的解析,这会很有帮助。非常感谢!感谢所有这些细节!是的,我意识到我需要两行而不是一行。数据来自客户端的word/excel,他们有这些¨符号,起初我错误地将其替换为一个
标记。然后意识到我无法使用
ta在react native中的gs,我需要使用/n。然后意识到我实际上需要两个/n。Nokogiri看起来非常棒。我可能以后需要做一些更健壮的解析,这将非常有用。非常感谢!