【问题标题】:How to remove consecutive instances of new line \n with ruby如何使用 ruby​​ 删除连续的换行符 \n 实例
【发布时间】:2021-10-04 05:58:39
【问题描述】:

我有一堆像这样的 ruby​​ 文本:

 "\n \n Slow-Coker Tomato Compote Recipe - NYT Coking\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Slow-Coker Tomato Compote\n \n \n \n \nBy Sarah DiGregorio\n \n \n \n \n Yield\n About 3 ½ cups\n \n \n Time\n 6 hours and 10 minutes\n \n \n \n \n \n EmailShare on PinterestShare on FacebokShare on Twiter\n \n \n \n \n \n \n \n \n \n \n \n Linda Xiao for The New York Times. Fod Stylist: Judy Kim.\n \n \n \n \n"

我想对这个字符串做的是用一个 \n 替换连续的 \n 换行符。换句话说,如果有多个换行符\n,那么我只想保留换行符,删除连续的。

这个正则表达式几乎可以解决问题:full_text.gsub(/((\n \n)\2*)/, '')——但你会看到,在\n 的一些连续组中,gsub 完全删除它们,而我希望它只留下一个\n.

理想情况下,我想将正则表达式传递给gsub,以便输出为:

" \n Slow-Coker Tomato Compote Recipe - NYT Coking   \n   Slow-Coker Tomato Compote  \nBy Sarah DiGregorio  \n Yield\n About 3 ½ cups \n Time\n 6 hours and 10 minutes \n   EmailShare on PinterestShare on FacebokShare on Twiter   \n   Linda Xiao for The New York Times. Fod Stylist: Judy Kim.  \n"

我需要编写什么正则表达式,以便gsub 只留下一个\n,其中有\n 的连续实例?

【问题讨论】:

  • 试试full_text.gsub(/\n[ \n]+/, "\n")full_text.gsub(/(\R)[ \r\n]+/, '\1')
  • 嗨@WiktorStribiżew 谢谢你的评论——我试过你的建议,它的输出不是我想要的。它会删除所有 \n 字符。正则表达式只需将连续的\n 替换为一个\n
  • 我编辑了我的问题,以便更清楚。
  • 我更新了我的第一个评论建议。我保留'' 作为替换,因为我从您的问题中复制/粘贴了代码。
  • 我很困惑。您的字符串中没有连续的 \ns。你能准确地描述你想用什么替换什么吗?

标签: regex ruby


【解决方案1】:

你可以使用

full_text = full_text.gsub(/(\R)(?:\s*\R)+/, '\1')

详情

  • (\R) - 组 1(组值在替换模式中用 \1 引用):任何换行序列
  • (?:\s*\R)+ - 一次或多次出现零个或多个空白字符以及任何换行符序列。

由于替换为\1,Group 1 值,因此第一个换行符序列被放回到原来的字符串中。

Ruby demo

full_text = "\n \n Slow-Coker Tomato Compote Recipe - NYT Coking\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Slow-Coker Tomato Compote\n \n \n \n \nBy Sarah DiGregorio\n \n \n \n \n Yield\n About 3 ½ cups\n \n \n Time\n 6 hours and 10 minutes\n \n \n \n \n \n EmailShare on PinterestShare on FacebokShare on Twiter\n \n \n \n \n \n \n \n \n \n \n \n Linda Xiao for The New York Times. Fod Stylist: Judy Kim.\n \n \n \n \n"
p full_text.gsub(/(\R)(?:\s*\R)+/, '\1')
# => "\n Slow-Coker Tomato Compote Recipe - NYT Coking\n Slow-Coker Tomato Compote\nBy Sarah DiGregorio\n Yield\n About 3 ½ cups\n Time\n 6 hours and 10 minutes\n EmailShare on PinterestShare on FacebokShare on Twiter\n Linda Xiao for The New York Times. Fod Stylist: Judy Kim.\n"

【讨论】:

  • 谢谢维克托!一旦允许我,我会接受这个作为正确答案。
猜你喜欢
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2012-08-12
  • 1970-01-01
  • 2021-02-14
相关资源
最近更新 更多