Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 正则表达式来模糊重复子字符串的子字符串_Ruby_Regex - Fatal编程技术网

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"