【问题标题】:Extract a substring using regex in Spring expression language在 Spring 表达式语言中使用正则表达式提取子字符串
【发布时间】:2019-09-03 04:45:41
【问题描述】:

我有一个类似

的字符串

字符串 1:abcdefgh{EID##00000000001234567890##EID}khkgfhjjh

字符串 2:qwertyuiop{EID##00000000001234567890##EID}asdaff

我想要输出 1234567890 ,如果 EID##...##EID 存在于 String1 中,如果不存在,它将在字符串 2 中搜索。如果两个结果中都不存在,则结果将是 00000000

但我只能使用 Spring Expression 语言。

我试过类似的东西:

${String1}.indexOf('EID##') != -1 AND ${String1}.indexOf('##EID') != -1 AND (${String1}.indexOf('##EID') - ${String1}.indexOf('EID##'))> 5
? 
(${String1}.substring(${String1}.indexOf('EID##')+5,${String1}.indexOf('##EID'))).replaceAll("^0+", "") 
: 
(${String2}.indexOf('EID##') != -1 AND ${String2}.indexOf('##EID') != -1 AND (${String2}.indexOf('##EID') - ${String2}.indexOf('EID##'))> 5  
? 
(${String2}.substring(${String2}.indexOf('EID##')+5,${String2}.indexOf('##EID'))).replaceAll("^0+", "")
: 
'0000000000')

但问题是我的字符数限制为 350。(这是 523 个字符) 有没有更简单的方法?

【问题讨论】:

  • 两个问题:为什么只能使用Spring Expression语言?为什么字数限制为 350?
  • PS:删除不必要的空格、换行符、将!= -1 更改为<0 之类的东西已经稍微降低了字符数,尽管470 个字符仍然太长。 ;) 将 String1String2 更改为较小的值,例如 ab 会将其降低到 386 个字符。为'EID##' 创建一个变量会使它在某种程度上等于 350。不幸的是,我根本不知道 Spring 表达式语言..
  • 在 Java 10+ 中我可以做到这一点in 125 characters。我在codegolf.stackexchange.com 上非常活跃。 ;)
  • 我正在使用一个工具(它是官方使用的),它只允许使用 Spring Expression lang,并且在内部它将这个表达式存储在一个列大小为 350 的数据库中的不可自定义的表中

标签: java regex regular-language spring-el


【解决方案1】:

我试过了,它的工作原理。

(${String1} 匹配 '.EID##.##EID.*') ? (${String1}.substring(${String1}.indexOf('EID##')+5,${String1}.indexOf('##EID'))).replaceAll("^0+", "" ) : ((${String2} 匹配 '.EID##.##EID.*') ? (${String2}.substring(${String2}.indexOf('EID##')+ 5,${String2}.indexOf('##EID'))).replaceAll("^0+", "") : '000000000')

【讨论】:

    猜你喜欢
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    相关资源
    最近更新 更多