首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java regex:正向前视和后视中的多个匹配

Java regex:正向前视和后视中的多个匹配
EN

Stack Overflow用户
提问于 2018-10-24 03:42:24
回答 1查看 572关注 0票数 1

我有一些像这样的字符串

  • my {test} value
  • my { test } value
  • my { test } value

我需要创建一个正则表达式,它将获得{}中的所有内容,而不包含空格。

在下一个模式(?<=\{)\s*[a-zA-Z]+\s*(?=})中,我得到了带空格的花括号的内容

如果我像这样将\s*设置为正向前视,我会看到下一个错误

无法执行正则表达式。java.util.regex.PatternSyntaxException:后视组在索引8 (?<={\s*)a-zA-Z+(?=\s*}) ^附近没有明显的最大长度

有没有可能在没有每个正则表达式匹配的trim()的情况下实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-24 03:46:17

你不需要向前看,也不需要向后看。像这样的简单正则表达式就足够了,

\{\s*(.*?)\s*\}

Demo、https://regex101.com/r/REDmDT/2 (包含更多示例字符串)

就像你说的,“我需要创建一个正则表达式,它将把{}中的所有东西都放在没有空格的地方。”

这个正则表达式为您提供了花括号内的所有内容,同时排除了右/left空格,并保留了其中的所有空格。

这里有一段java代码演示了这一点。

public static void main(String[] args) throws IOException {
    List<String> list = Arrays.asList("my  {test} value", "my  {   test     } value", "my  { test  } value",
            "my  { test hello I am  } value", "my  { testing 10 times  } value");
    Pattern p = Pattern.compile("\\{\\s*(.*?)\\s*\\}");

    list.forEach(x -> {
        Matcher m = p.matcher(x);
        if (m.find()) {
            System.out.println(x + " --> " + m.group(1));
        }
    });
}

这个输出

my  {test} value --> test
my  {   test     } value --> test
my  { test  } value --> test
my  { test hello I am  } value --> test hello I am
my  { testing 10 times  } value --> testing 10 times
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52956712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档