Ruby 正则表达式来模糊重复子字符串的子字符串
给定如下字符串:Ruby 正则表达式来模糊重复子字符串的子字符串,ruby,regex,Ruby,Regex,给定如下字符串: abc_1234 xyz def_123aa4a56 我想替换它的一部分,因此输出为: abc_*******z def_*******56 这些规则是: abc和def是一种分隔符,因此两者之间的任何内容都是前一个分隔符字符串的一部分 abc_和def_之间的字符串以及下一个分隔字符串应替换为*,该子字符串的最后两个字符除外。在上面的示例中,abc_1234 xyz(注意尾随空格),已变为abc_**********z 这就是你要找的吗 str = "Hello abc_
abc_1234 xyz def_123aa4a56
我想替换它的一部分,因此输出为:
abc_*******z def_*******56
这些规则是:
abc
和def
是一种分隔符,因此两者之间的任何内容都是前一个分隔符字符串的一部分abc_
和def_
之间的字符串以及下一个分隔字符串应替换为*
,该子字符串的最后两个字符除外。在上面的示例中,abc_1234 xyz
(注意尾随空格),已变为abc_**********z
这就是你要找的吗
str = "Hello abc_111def_frg def_333World abc_444"
str.scan(/(?<=abc_|def_)(?:[[:alpha:]]+|[[:digit:]]+)/)
# => ["111", "frg", "333", "444"]
str=“你好,abc_111def_frg def_333;世界abc_444”
str.scan(/(?[“111”,“frg”,“333”,“444”]
我假设“abc_uu”
或“def_u”
后面的字符串要么全是数字,要么全是字母。例如,如果您希望从“abc_a1bcat”
中提取“a1b”
,则该字符串将无法工作。您需要更好地定义终止所需字符串的规则
正则表达式的内容是,“在字符串“abc_quot
或“def_quot
(不是匹配的一部分的正向查找)之后,匹配一个数字字符串或一个字母字符串”。给定:
> s
=> "abc_1234 xyz def_123aa4a56"
你可以做:
> s.gsub(/(?<=abc_|def_)(.*?)(..)(?=(?:abc_|def_|$))/) { |m| "*" * $1.length<<$2 }
=> "abc_*******z def_*******56"
>s.gsub(/(?您可以通过str.scan(/\d+/).map(&:to_i)
获得四个整数,但我不明白这与“我假设我想要:”后面的内容有什么关系。最好有一个完整的示例,包括所需的返回值。@CarySwoveland,我添加了一些细节:abc_后面的值可能是任何东西(除了空格)“不应该是数字。什么应该返回<代码> DEFY362Word < /代码>或<代码> Def123Word < /代码>?代码> 332代码/代码>和代码> 123代码>或不考虑?这非常不清楚。
可能会有问题。这取决于规范的详细信息。谢谢,这也很有效。我将对其进行修改,以替换除最后2项之外的所有内容characters@Zabba你的“修复”此答案无效。在发布答案后,您不应更改问题的要点,当然也不应在接受其中一个答案后更改问题的要点。@stefan,删除此问题更好吗?@Zabba我不知道。原始问题和修订问题都很有趣。但目前,标题、问题、评论和答案都不重要不要在一起。。。
> s.gsub(/(?<=abc_|def_)(.*?)(..)(?=(?:abc_|def_|$))/) { |m| "*" * $1.length<<$2 }
=> "abc_*******z def_*******56"