【问题标题】:Replace in groovy a string in path with another string在常规中用另一个字符串替换路径中的字符串
【发布时间】:2021-10-18 12:39:18
【问题描述】:

我想替换为:

“stable_dev/201904_xx/text1/text2.zip”
"stable_dev/201904/text5/text6.war"

进入:

"stable_dev/new_value/text1/text2.zip"
“stable_dev/new_value/text5/text6.war”
我试过了

arrayList.toString().replaceAll("stable_dev/"+"[0-9a-zA-Z]*"+"[^a-zA-Z0-9]*"+"[0-9a-zA-Z]*"+"/", "stable_dev/new_value/"))

【问题讨论】:

  • 我们应该猜你的问题吗? ;)

标签: groovy jenkins-groovy groovy-console


【解决方案1】:

这仅针对您的示例。想法是搜索stable_dev/,然后将所有内容定位到下一个/,然后将其替换为新值。

def str = "stable_dev/201904_xx/text1/text2.zip"

println str.replaceAll(/stable_dev\/.*?\//,"stable_dev/new_value/")​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

//Output:
//stable_dev/new_value/text1/text2.zip​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

【讨论】:

    【解决方案2】:

    我会使用split 来避免过于复杂的正则表达式:

    def replacer = { String replacement, String val ->
      def parts = val.split( /\d{6}_?([a-z0-9]{2})?/ )
      2 != parts.size() ? val : "${parts[ 0 ]}$replacement${parts[ 1 ]}"
    }
    
    def results = [
      'aaa',
      "stable_dev/201904_xx/text1/text2.zip",
      "stable_dev/201904/text5/text6.war"
    ].collect replacer.curry( 'new_value' )
    
    assert results == [ 'aaa', 'stable_dev/new_value/text1/text2.zip', 'stable_dev/new_value/text5/text6.war' ]
    

    【讨论】:

      猜你喜欢
      • 2021-06-15
      • 2019-05-14
      • 2013-12-03
      • 1970-01-01
      • 2017-01-28
      • 2017-03-07
      • 2011-07-01
      • 1970-01-01
      相关资源
      最近更新 更多