[英]Ruby: Conditional replace in String using gsub
給定一個輸入字符串:
<m>1</m>
<m>2</m>
<m>10</m>
<m>11</m>
我想用5
替換所有不等於1
值。
所以輸出String應如下所示:
<m>1</m>
<m>5</m>
<m>5</m>
<m>5</m>
我試過用:
gsub(/(<m>)([^1])(<\/m>)/, '\15\3')
但這不會取代10
和11
。
#gsub
可以選擇一個塊,並替換為該塊的結果:
subject.gsub(/\d+/) { |m| m == '1' ? m : '5' }
沒有正則表達式只是因為它是可能的
"1 2 10 11".split.map{|n| n=='1' ? n : '5'}.join(' ')
result = subject.gsub(/\b(?!1\b)\d+/, '5')
說明:
\b # match at a word boundary (in this case, at the start of a number)
(?! # assert that it's not possible to match
1 # 1
\b # if followed by a word boundary (= end of the number)
) # end of lookahead assertion
\d+ # match any (integer) number
編輯:
如果您只想替換<m>
和</m>
所包圍的數字,那么您可以使用
result = subject.gsub(/<m>(?!1\b)\d+<\/m>/, '<m>5</m>')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.