請在ruby中用正則表達式來幫助我。用紅寶石代替數字後的每個 n
我有一個像
1.你好,世界\ n文本 2. \ n 早安\ n
我期待兩個字符串,但在原來它有一個三個字符串壞'新行 - \ n'字符
問題如何在'2'後替換'壞'\ n。和之前「早安\ n」 我有這樣
請在ruby中用正則表達式來幫助我。用紅寶石代替數字後的每個 n
我有一個像
1.你好,世界\ n文本 2. \ n 早安\ n
我期待兩個字符串,但在原來它有一個三個字符串壞'新行 - \ n'字符
問題如何在'2'後替換'壞'\ n。和之前「早安\ n」 我有這樣
你可以排除這樣
的「壞」換行符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"
這將刪除一個或多個數字後跟一個點的換行符。
這似乎不起作用。 'gsub'被調用之前'$ 1'必須可用,但它不是。您可以改爲'gsub(/(\ d + \。)\ n /){$ 1}'。 –
哎呀,對不起..發生在與其他正則表達式混亂:) 修復答案。 – dgasper
str.gsub(/(?:\d\.)\n/,'')
在正則表達式(一個數字後面加一個點),括號中的東西匹配,但沒有捕獲,因爲?:
感謝所有,太棒了! – Halibut
這似乎不起作用。儘管'(?:...)'部分沒有被捕獲,它正在被替換。 –
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+\.
部分尋找後續的「行」;它接受任何多位數字和點之前的無限空格字符。
這可能並不完美,但涵蓋更多場景。 你有沒有更好的方式來檢索數據?爲數據解析字符串在最好的時候是艱苦的工作;甚至當字符串格式不正確時更是如此。
在紅寶石中使用'gsub'方法。請參閱ruby 1.9.3文檔[strings](http://ruby-doc.org/core-1.9.3/String.html) – uday
將代碼粘貼到 – klochner