Ruby:使用gsub有条件地替换字符串

标签 ruby regex replace conditional

给定一个输入字符串:

<m>1</m>
<m>2</m>
<m>10</m>
<m>11</m>

我想用 5 替换所有不等于 1 的值。
所以输出字符串应该是这样的:

<m>1</m>
<m>5</m>
<m>5</m>
<m>5</m>

我尝试使用:

gsub(/(<m>)([^1])(<\/m>)/, '\15\3')

但这不会取代 1011

最佳答案

#gsub 可以选择获取一个 block 并将替换为该 block 的结果:

subject.gsub(/\d+/) { |m| m == '1' ? m : '5' }

关于Ruby:使用gsub有条件地替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4367216/

相关文章:

javascript - 为什么 Settimeout 不拉取更新后的图片 URL?

javascript - 检查 id 是否与模式匹配

r - 我能合理拆分这些数字串吗?

javascript - 为什么我不能用 Typescript (Javascript) 替换换行符

java - Java 中使用正则表达式进行搜索和替换

python - 比 re.sub 更快(更 Pythonic)的解决方案?删除前缀(由许多相同的字符组成)

ruby-on-rails - 我想让我的 Rails 日志中的某些文本具有不同的颜色

ruby-on-rails - 禁用 IP 地址记录 Rails

ruby - Jekyll 中的缓慢再生

JavaScript 替换/正则表达式