Ruby正则匹配-优雅的写法

2018年11月13日 0 条评论 113 次阅读 0 人点赞

今天工作中遇到一个问题: 

描述如下:

想把类似"(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)

你必须 登录 才能发表评论