今天工作中遇到一个问题:
描述如下:
想把类似"(p3\p0\L)\0.1\sc" 这样的字符串替换为这样 "((p3)\(p0)\L)\0.1\sc",就是给p3和p0加了两个括号,用的是正则表达式匹配和gsub方法,但是执行str.gsub(/\w\d/, "(12)")这句话之后,匹配到的都变成固定值了,有什么办法改一下gsub的第二个参数,保留p3 和p0的值吗?
解决方法:
Ruby正则表达式中,
$` $& $' 分别表示匹配部分前的字符串($`)、匹配部分的字符串($&)、匹配部分后的字符串($')。
因此一个优雅的解法就是:
从第一个找到的开始替换,不断替换剩下的部分,直到没有了就退出。
代码如下:
test_str = '(p3\p0\p5\L)\0.1\sc' match = test_str[/\w\d/] while true if $' test_str.gsub!($&, "(#{$&})") $'[/\w\d/] else break end end p test_str
© 著作权归作者所有
文章评论(0)