当前位置: 首页 > 面试题库 >

如何使用正则表达式提取括号中的单词?

上官波鸿
2023-03-14
问题内容

我想提取所有 大括号括起来的 单词 ,所以我有一个这样的表达式

foo {bar} moo {mar}

匹配的字符串可能包含任意多个这样的单词,但是我开始认为我正在以错误的方式解决此问题。

我的尝试

而且我尝试将花括号这些词提取为组,以便可以使用每一个匹配项。所以,我做了一个正则表达式:

String rx = ".*\\{({GROUP}\\w+)\\}.*";

注意:我使用的是JRegex语法,因此我需要避免掉一些curl。

结果

我得到的结果是一个(虽然是正确的)比赛bar,而我希望有两个比赛barmar。我误解了什么,如何纠正?我可能需要为该.零件使用其他一些量词,但我希望您也能对此提供帮助。

提前谢谢了!


问题答案:

您的正则表达式.*\{({GROUP}\w+)\}.*不起作用,因为它一次匹配了所有输入字符串:

  • .* 火柴 foo
  • \{({GROUP}\w+)\} 火柴 {bar}
  • .* 火柴 moo {mar}

您应该使用这样的东西:

List<String> matchList = new ArrayList<String>();

Pattern regex = Pattern.compile("\\{([^}]*)\\}");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) 
{
  matchList.add(regexMatcher.group());
}

正则表达式不处理内部花括号



 类似资料:
  • 有以下语句 想实现的功能如下: 当输入title时,正则表达式可以把title作为关键字提取出来 当输入title="beijing" && body时,正则表达式可以把body作为关键字提取出来 当输入title="beijing" && body="login" && (title="a" && body)时,正则表达式可以把小括号中body作为关键字提取出来 上述功能主要是把=号左值(关键词

  • 问题内容: 输入线在下面 你能帮我写一个Java正则表达式来提取 从上方输入线? 问题答案: 更加简洁:

  • 我需要通过不在括号中的管道拆分文本。这是示例文本 我在这里找到了这个/\ |(?![^{]*})/g:regex,提取字符串,不要在两个括号之间 现在当我想用管子分割这部分字符串时 它还选择杰森、玛丽亚和圣诞老人之间的管道,因为它们后面有一个开口支架。如果正则表达式不在任何括号中,如何将其更改为仅匹配管道。 测试字符串: 应该返回 . 应该返回

  • 正如标题所说,以下是一个输入示例: 当然,匹配的字符串将通过递归进行处理。 我希望第一个递归匹配: 之后的过程不用说。。。

  • 问题内容: 我试图从圆括号中提取一个字符串。 比方说,我有,我只想输出字符串。 我找到了此链接和此正则表达式: 但是,我无法弄清楚如何获得想要的结果。 任何帮助,将不胜感激。谢谢! 问题答案: String str=”John Doe (123456789)”; System.out.println(str.substring(str.indexOf(“(“)+1,str.indexOf(“)”)

  • 问题内容: 匹配字符串中的’(’的正则表达式是什么? 以下是场景: 我有一串 我想使用正则表达式拆分字符串。为此,我正在使用 但是我收到以下异常。 转义似乎不起作用。 问题答案: 两种选择: 首先,你可以使用转义 回 斜线- 另外,由于它是单个字符,因此您可以将其放入不需要转义的字符类中-