我正在構建一個Ruby程序,它需要在字符串中的第二和第三個完全停止之間提取值。紅寶石:提取第二和第三完全停止之間的子串
我在網上搜索了各種相關的解決方案,包括截斷和以前的Stack-Overflow問題:Get value between 2nd and 3rd comma,但沒有答案說明了Ruby語言的解決方案。
在此先感謝。
我正在構建一個Ruby程序,它需要在字符串中的第二和第三個完全停止之間提取值。紅寶石:提取第二和第三完全停止之間的子串
我在網上搜索了各種相關的解決方案,包括截斷和以前的Stack-Overflow問題:Get value between 2nd and 3rd comma,但沒有答案說明了Ruby語言的解決方案。
在此先感謝。
這樣做我認爲。第一條命令將其分割成一個列表。第二個得到你想要的位
你可以拆分full stops(又名句點)上的字符串,但是爲每個子句串創建一個數組。如果文件有一百萬個這樣的子字符串,那麼獲得第三個字符串是一種相當低效的方式。
假設字符串爲:
mystring =<<_
Now is the time
for all Rubiests
to come to the
aid of their
bowling team.
Or their frisbee
team. Or their
air guitar team.
Or maybe something
else...
_
這裏有幾個你可以採取的辦法。
#1使用正則表達式
r =/
(?: # start a non-capture group
.*?\. # match any character any number of times, lazily, followed by a full stop
){2} # end non-capture group and perform operation twice
\K # forget everything matched before
[^.]* # match everything up to the next full stop
/xm # extended/free-spacing regex definition mode and multiline mode
mystring[r]
#=> " Or their\nair guitar team"
你當然可以寫正則表達式:
r = /(?:.*?\.){2}\K[^.]*/m
,而是擴展的形式,使得它的自我記錄。
正則表達式引擎將遍歷字符串,直到找到匹配或者得出結論:不能匹配,並在那裏停止。
#2假裝一個句號是一個換行符
首先假設我們正在尋找第三條線,而不是第三子後跟一個句號。我們可以這樣寫:
mystring.each_line.take(3).last.chomp
# => "to come to the"
Enumerable#take確定何時一行通過檢查輸入記錄分隔符,這是由global variable$/
舉行結束。默認情況下,$/
等於換行符。因此,我們可以這樣做:
irs = $/ # save old value, normally \n
$/ = '.'
mystring.each_line.take(3).last[0..-2]
#=> " Or their\nair guitar team"
然後不留腳印:
$/ = irs
這裏String#each_line返回一個枚舉(實際上是確定值序列的規則),而不是一個數組。
怎麼樣,發佈一個顯示問題的文件,並試圖解決它? – Friedrich
這個問題似乎要麼*我們*爲您寫代碼,或者推薦一個網站或書籍,您可以從中複製代碼。這兩個都是關於SO的話題。 –