Dty*_*Dty 4 ruby regex ruby-on-rails
说我有这样的字符串
"some3random5string8"
Run Code Online (Sandbox Code Playgroud)
我想在每个整数后插入空格,所以它看起来像这样
"some3 random5 string8"
Run Code Online (Sandbox Code Playgroud)
我特别想要使用gsub但我无法弄清楚如何访问与我的正则表达式匹配的字符.
例如:
temp = "some3random5string8"
temp.gsub(/\d/, ' ') # instead of replacing with a ' ' I want to replace with
# matching number and space
Run Code Online (Sandbox Code Playgroud)
我希望有一种方法可以引用正则表达式匹配.像$1这样的东西,我可以做一些事情temp.gsub(/\d/, "#{$1 }")(注意,这不起作用)
这可能吗?
Mic*_*ohl 13
来自gsub文档:
如果replacement是String,它将替换匹配的文本.它可能包含对格式\ d形式的模式捕获组的反向引用,其中d是组号,或者\ k,其中n是组名.如果它是双引号字符串,则两个反向引用都必须以额外的反斜杠开头.
这意味着以下3个版本将起作用
>> "some3random5string8".gsub(/(\d)/, '\1 ')
=> "some3 random5 string8 "
>> "some3random5string8".gsub(/(\d)/, "\\1 ")
=> "some3 random5 string8 "
>> "some3random5string8".gsub(/(?<digit>\d)/, '\k<digit> ')
=> "some3 random5 string8 "
Run Code Online (Sandbox Code Playgroud)
编辑:如果您不想在末尾添加额外的空格,请在行尾使用负向前瞻,例如:
>> "some3random5string8".gsub(/(\d(?!$))/, '\1 ')
=> "some3 random5 string8"
Run Code Online (Sandbox Code Playgroud)
检查"单词字符"的正向前瞻当然也会起作用:
>> "some3random5string8".gsub(/(\d(?=\w))/, '\1 ')
=> "some3 random5 string8"
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的是,最简单的版本,最后没有空格:
>> "some3random5string8".gsub(/(\d)(\w)/, '\1 \2')
=> "some3 random5 string8"
Run Code Online (Sandbox Code Playgroud)
gsub采取一个块,这对我来说比无块的方式更容易记住.
"some3random5string8".gsub(/\d/){|digit| digit << " "}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6393 次 |
| 最近记录: |