2012-01-23 32 views
1

請在ruby中用正則表達式來幫助我。用紅寶石代替數字後的每個 n

我有一個像

1.你好,世界\ n文本 2. \ n 早安\ n

我期待兩個字符串,但在原來它有一個三個字符串壞'新行 - \ n'字符

問題如何在'2'後替換'壞'\ n。和之前「早安\ n」 我有這樣

+0

在紅寶石中使用'gsub'方法。請參閱ruby 1.9.3文檔[strings](http://ruby-doc.org/core-1.9.3/String.html) – uday

+0

將代碼粘貼到 – klochner

回答

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" 

這將刪除一個或多個數字後跟一個點的換行符。

+0

這似乎不起作用。 'gsub'被調用之前'$ 1'必須可用,但它不是。您可以改爲'gsub(/(\ d + \。)\ n /){$ 1}'。 –

+0

哎呀,對不起..發生在與其他正則表達式混亂:) 修復答案。 – dgasper

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

與成千上萬的錯誤故障替換立即數字(\d)和僅僅是數字,點一個點之前的所有換行符。

+0

undur_gongor =>謝謝! – Halibut

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

在正則表達式(一個數字後面加一個點),括號中的東西匹配,但沒有捕獲,因爲?:

+0

感謝所有,太棒了! – Halibut

+0

這似乎不起作用。儘管'(?:...)'部分沒有被捕獲,它正在被替換。 –

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+\. pa表達式的rt檢測字符串中的第一個「行」。 \n\s*\d+\.部分尋找後續的「行」;它接受任何多位數字和點之前的無限空格字符。

這可能並不完美,但涵蓋更多場景。 你有沒有更好的方式來檢索數據?爲數據解析字符串在最好的時候是艱苦的工作;甚至當字符串格式不正確時更是如此。