gpt4 book ai didi

ruby-on-rails - 字符串 gsub 正则表达式中的引用匹配

转载 作者:数据小太阳 更新时间:2023-10-29 07:20:38 25 4
gpt4 key购买 nike

假设我有这样一个字符串

"some3random5string8"

我想在每个整数后插入空格,所以它看起来像这样

"some3 random5 string8"

我特别想使用 gsub 执行此操作,但我不知道如何访问与我的正则表达式匹配的字符。

例如:

temp = "some3random5string8"
temp.gsub(/\d/, ' ') # instead of replacing with a ' ' I want to replace with
# matching number and space

我希望有一种方法可以引用正则表达式匹配。像 $1 这样我可以做像 temp.gsub(/\d/, "#{$1 }") 这样的事情(注意,这是行不通的)

这可能吗?

最佳答案

来自 gsub 文档:

If replacement is a String it will be substituted for the matched text. It may contain back-references to the pattern’s capture groups of the form \d, where d is a group number, or \k, where n is a group name. If it is a double-quoted string, both back-references must be preceded by an additional backslash.

这意味着以下 3 个版本都可以使用

>> "some3random5string8".gsub(/(\d)/, '\1 ')
=> "some3 random5 string8 "
>> "some3random5string8".gsub(/(\d)/, "\\1 ")
=> "some3 random5 string8 "
>> "some3random5string8".gsub(/(?<digit>\d)/, '\k<digit> ')
=> "some3 random5 string8 "

编辑:另外,如果您不想在末尾添加额外的空格,请对行尾使用负前瞻,例如:

>> "some3random5string8".gsub(/(\d(?!$))/, '\1 ')
=> "some3 random5 string8"

当然,对“单词字符”进行积极的前瞻性检查也是可行的:

>> "some3random5string8".gsub(/(\d(?=\w))/, '\1 ')
=> "some3 random5 string8"

最后但同样重要的是,最简单的末尾没有空格的版本:

>> "some3random5string8".gsub(/(\d)(\w)/, '\1 \2')
=> "some3 random5 string8"

关于ruby-on-rails - 字符串 gsub 正则表达式中的引用匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9772197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com