如何在Groovy中获取匹配"abcd efgh"行之后的内容?
提取"abcd efgh"之后的内容(Groovy实现)
没问题,我来帮你搞定这个需求。在Groovy里,你可以用两种实用方式实现:正则匹配或者更简洁的字符串原生方法,下面分别给你详细示例:
方法一:正则表达式精准捕获
Groovy兼容Java正则语法,我们可以通过捕获组直接提取目标内容:
示例代码
def inputText = "dafdsdf abcd efgh hello hi new" // 定义正则,捕获"abcd efgh"之后的所有内容 def pattern = /.*abcd efgh(.*)/ def matcher = inputText =~ pattern if (matcher.matches()) { def result = matcher.group(1).trim() // 移除开头可能的冗余空格 println(result) // 输出: hello hi new }
正则逻辑解释
.*:匹配任意字符(不含换行)零次或多次,用来覆盖"abcd efgh"之前的所有内容abcd efgh:精确匹配你指定的触发字符串(.*):捕获组,专门用来提取触发字符串之后的所有内容- 调用
trim()是为了处理触发字符串和目标内容之间可能存在的多余空格
方法二:Groovy字符串便捷操作
如果确定触发字符串一定存在,用indexOf配合substring会更直观,性能也略优:
def inputText = "dafdsdf abcd efgh hello hi new" def triggerStr = "abcd efgh" def startPos = inputText.indexOf(triggerStr) + triggerStr.length() def result = inputText.substring(startPos).trim() println(result) // 输出: hello hi new
多行文本场景适配
如果你的输入是包含换行的多行文本,只需调整正则来匹配换行符:
def multiLineInput = """第一行内容 dafdsdf abcd efgh hello hi new 第三行内容""" // 用[\s\S]*匹配包括换行在内的所有字符 def pattern = /.*abcd efgh([\s\S]*)/ def matcher = multiLineInput =~ pattern if (matcher.matches()) { def result = matcher.group(1).trim() println(result) }
内容的提问来源于stack exchange,提问作者Jenisha
相关产品推荐
相关产品推荐

