Java 使用正则表达式同时执行序列和组?

Java 使用正则表达式同时执行序列和组?,java,regex,groovy,Java,Regex,Groovy,一点延续 样品 AD ABCDEFG HIJKLMN AB HIJKLMN AC DJKEJKW SJKLAJL JSHELSJ 规则:始终在行开始处使用2个字符代码(AB | AC | AD),然后在其后使用任何数量(>1)的7个字符代码(至少一个7字符代码)。组之间的空格也可以是“.”。 通过这个表达式,我可以很好地将其分组 /^(AB | AC | AD)|((\S{7}+)+)/ 我可以使用组[0]访问2chars代码,依此类推 我可以同时执行上述规则吗 对于上述正则表达式,以下行也有效

一点延续

样品

AD ABCDEFG HIJKLMN
AB HIJKLMN
AC DJKEJKW SJKLAJL JSHELSJ

规则:始终在行开始处使用2个字符代码(AB | AC | AD),然后在其后使用任何数量(>1)的7个字符代码(至少一个7字符代码)。组之间的空格也可以是“.”。

通过这个表达式,我可以很好地将其分组
/^(AB | AC | AD)|((\S{7}+)+)/

我可以使用组[0]访问2chars代码,依此类推

我可以同时执行上述规则吗

对于上述正则表达式,以下行也有效(因为正则表达式中的OR |)

AC
dfghjkl
asdfgh hjklpoi

这不是我需要的

再次感谢regex专家

尝试一下:

^(A[BCD])(([ .])([A-Z]{7}))+$
试试看:

^(A[BCD])(([ .])([A-Z]{7}))+$

就我个人而言,我会分两步来做这件事

  • 我会检查字符串是否与正则表达式匹配
  • 我将
    根据分隔符字符
    [.]
  • 此代码:

    def input = [
      'AD ABCDEFG HIJKLMN',
      'AB HIJKLMN',
      'AC DJKEJKW SJKLAJL JSHELSJ',
      'AC',
      'dfghjkl',
      'asdfgh hjklpoi',
      'AC DJKEJKW.SJKLAJL JSHELSJ',
    ]
    
    def regexp = /^A[BCD]([ .](\S{7}))+$/
    
    def result = input.inject( [] ) { list, inp ->
      // Does the line match the regexp?
      if( inp ==~ regexp ) {
        // If so, split it
        list << inp.split( /[ .]/ )
      }
      list
    }
    
    println result
    

    就我个人而言,我会分两步来做这件事

  • 我会检查字符串是否与正则表达式匹配
  • 我将
    根据分隔符字符
    [.]
  • 此代码:

    def input = [
      'AD ABCDEFG HIJKLMN',
      'AB HIJKLMN',
      'AC DJKEJKW SJKLAJL JSHELSJ',
      'AC',
      'dfghjkl',
      'asdfgh hjklpoi',
      'AC DJKEJKW.SJKLAJL JSHELSJ',
    ]
    
    def regexp = /^A[BCD]([ .](\S{7}))+$/
    
    def result = input.inject( [] ) { list, inp ->
      // Does the line match the regexp?
      if( inp ==~ regexp ) {
        // If so, split it
        list << inp.split( /[ .]/ )
      }
      list
    }
    
    println result
    

    似乎您的方法比为了1而在同一行上执行2个regex语句更聪明/性能更好。验证和2.2.谢谢!如果你需要编辑它,你会更开心:-)祝你好运!似乎您的方法比为了1而在同一行上执行2个regex语句更聪明/性能更好。验证和2.2.谢谢!如果你需要编辑它,你会更开心:-)祝你好运!