出現的字符串使用Ruby的String#scan
我想從提取:如何掃描的一個或兩個數字的整數
"8 12 13.5 145 foobar-123F 0.33 10"
這些結果:
['8', '12', '10']
,但沒有別的。
出現的字符串使用Ruby的String#scan
我想從提取:如何掃描的一個或兩個數字的整數
"8 12 13.5 145 foobar-123F 0.33 10"
這些結果:
['8', '12', '10']
,但沒有別的。
如果你想要一個純粹的基於正則表達式的解決方案:
/(?<=\s|\A)\d{1,2}(?=\s|\Z)/
此用途積極lookbehead和積極lookahead檢查數字組是否只包圍分隔符。
但是我會做的是使用String#split來標記字符串,並過濾掉包含非數字字符的標記。在我看來,這將使代碼更具可讀性。例如:
s = "8 12 13.5 145 foobar-123F 0.33 10"
s.split.select { |token| token =~ /\A\d{1,2}\Z/ }
=> ["8", "12", "10"]
您可以使用單詞邊界和lookarounds:
> "8 12 13.5 145 foobar-123F 0.33 10".scan(/(?<!\.)\b\d{1,2}\b(?!\.)/)
=> ["8", "12", "10"]
要排除負數:
> "8 12 13.5 145 foobar-123F 0.33 10 -12".scan(/(?<![.\-])\b\d{1,2}\b(?!\.)/)
=> ["8", "12", "10"]
'-12'怎麼辦? – dawg
-12不應該匹配,對不起,應該指定! – whistler
當您嘗試編寫代碼時發生了什麼?你的問題應該詢問它的具體問題,而不是要求我們爲你寫。 「[mcve]」和http://meta.stackoverflow.com/q/261592/128421將是很好的讀取。 –