在ruby中替换每个\ n后的数字

时间:2012-01-23 21:08:01

标签: mysql ruby-on-rails ruby regex string

请用ruby中的正则表达式帮助我。

我有一个像

这样的文字

1。你好,世界\ n 2.的 \ n 早安\ n

我期待两个字符串,但原来它有三个字符串,坏'新行 - \ n'字符

询问如何在'2.'之后替换'bad'\ n'在'早安\ n'之前 我遇到了像这样的数千个错误的麻烦

4 个答案:

答案 0 :(得分:4)

str.gsub(/(\d\.)\n/, '\1')

替换所有紧接在数字前面的换行符(\d)和一个点除以该数字和点。

答案 1 :(得分:1)

str.gsub(/(?:\d\.)\n/,'')

由于?:

,正则表达式中括号中的内容(数字后跟一个点)匹配但未捕获

答案 2 :(得分:1)

你可以删除像这样的'坏'换行符

string = "1. Hello, World\n 2.\n Good Morning\n"
new_string = string.gsub(/(\d+\.)\n/, '\1') #=> "1. Hello, World\n 2. Good Morning\n"

这将删除一个或多个数字后跟一个点后的换行符。

答案 3 :(得分:1)

undur_gongor的答案会告诉你你的要求,但我想知道这是不是你真正需要的。

例如,如果一条线合法地以数字结尾,然后是一个点,如下所示:

str = "1. Hello, World\n 2.\n Good Morning\n 3.Today is 29th January 2012.\n 4. This should be a new line.\n"

你最终会得到:

"1. Hello, World\n 2. Good Morning\n 3.Today is 29th January 2012. 4. This should be a new line.\n"

所以你最好不要使用:

str.gsub(/(^\d+\.|\n\s*\d+\.)\n/, '\1')

表达式的^\d+\.部分检测字符串中的第一个“行”。 \n\s*\d+\.部分查找后续的“行”;它在任何多位数字和点之前接受无限的空白字符。

它可能并不完美,但涵盖了更多场景。 你有更好的方法来检索数据吗?在最好的情况下,解析数据字符串是一项艰苦的工作;当字符串格式错误时更是如此。