簡體   English   中英

Ruby:使用gsub在String中進行條件替換

[英]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')

但這不會取代1011

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM