You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式新手求助:无法提取字符串中的orgType值

解决正则提取orgType值的问题

嘿,我来帮你搞定这个正则匹配的小问题~

首先,咱们来看看你遇到的问题:你写的正则(?<=orgType==)"[^"]+"之所以返回null,是因为原字符串里orgType==后面有一个空格,但你的正向预查(?<=orgType==)只匹配了orgType==这几个字符,没把后面的空格包含进去,导致正则找不到对应的匹配位置。

修正方案

咱们调整一下正则,把orgType==后面的可选空格考虑进去,同时可以优化一下,直接捕获引号里的内容(这样不用后续处理引号):

Pattern pattern = Pattern.compile("orgType==\\s*\"([^\"]+)\"");
Matcher matcher = pattern.matcher("{action==\"Submit\" && orgType== \"supply\"}");
if (matcher.find()) {
    String orgTypeValue = matcher.group(1); // 这里直接拿到"supply",不带引号
    System.out.println(orgTypeValue); // 输出supply
}

正则解释

  • orgType==\\s*:匹配orgType==,后面跟任意数量的空白字符(\\s*表示0个或多个空格、制表符等,这样不管有没有空格都能匹配)
  • "([^\"]+)":匹配双引号,然后用捕获组([^\"]+)捕获所有不是双引号的字符(也就是引号里的内容),最后匹配闭合的双引号

如果你坚持用正向预查的方式

也可以调整你的原正则,把空格加进去:

Matcher matcher = Pattern.compile("(?<=orgType==\\s*\")([^\"]+)").matcher(conditionExpression);
if (matcher.find()) {
    System.out.println(matcher.group()); // 直接输出supply
}

这个正则的正向预查(?<=orgType==\\s*\")会匹配orgType==、任意空格和左引号,然后捕获后面的非引号字符,这样就能直接拿到不带引号的值了。

最后要提醒一下:使用Matcher的时候,一定要先调用matcher.find()来查找匹配项,之后才能调用group()获取结果,不然就会返回null哦~

内容的提问来源于stack exchange,提问作者Ravi Soni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:07:12