当前位置: 首页 > 知识库问答 >
问题:

带有捕获组的RegEx(不使用Java)[重复]

邢宏浚
2023-03-14
    null
(.*SHELF)-(.*)\[.*SHELF-(.*)\]
Pattern pattern = Pattern.compile("(.*SHELF)-(.*)\\[.*SHELF-(.*)\\]");
Matcher matcher = pattern.matcher(inputString);
String group1 = matcher.group(1);
String group2 = matcher.group(2);
String group3 = matcher.group(3);

我得到以下错误:

java.lang.IllegalStateException: No match found

为什么会这样?

共有1个答案

宇文梓
2023-03-14

这篇文章回答了你最初的问题。

该表达式创建捕获组,并以多种形式返回所需的输出:

(([A-Z]+)-([0-9]+))\[([A-Z]+)-([A-Z0-9-]+)(\])

如果您愿意,您可以进一步简化它。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "(([A-Z]+)-([0-9]+))\\[([A-Z]+)-([A-Z0-9-]+)(\\])";
final String string = "PSHELF-2[PSHELF-MF-6RU]\n"
     + "SHELF-5[SHELF-M6]\n"
     + "SHELF-6[SHELF-M15]\n"
     + "SHELF-6[SHELF-M15]";
final String subst = "\\1 \\4";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);

System.out.println("Substitution result: " + result);
const regex = /(([A-Z]+)-([0-9]+))\[([A-Z]+)-([A-Z0-9-]+)(\])/gm;
const str = `PSHELF-2[PSHELF-MF-6RU]
SHELF-5[SHELF-M6]
SHELF-6[SHELF-M15]
SHELF-6[SHELF-M15]`;
const subst = `\nGroup 1: $1\nGroup 2: $2\nGroup3: $3\nGroup 4: $4\nGroup 5: $5`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);
 类似资料:
  • 我正在试图理解这个代码块。在第一个中,我们在表达式中寻找的是什么? 我的理解是,它是任何一个字符(0或多个*),后面跟0到9之间的任何一个数字(一个或多个+),后面跟任何一个字符(0或多个*)。 执行此操作时,结果为: 使用抓取群的好处是什么?

  • 总体目标:我希望能够捕获一个正或负数,看起来像这样:xxx.xxx 我也在使用谷歌表,所以我不能使用任何查找

  • 我有下面的台词, 所以,如果我再加上两个括号,比如:那么,会有两个组吗?将返回部分,而返回部分? 代码段是为了澄清我的困惑而给出的。不是我处理的代码。上面给出的代码可以用以更简单的方式完成。

  • 我很难匹配和捕捉这些。目前我正在尝试以下变体: 我认为sed有一些regex或捕获组行为我不理解

  • 我是NextFlow/Groovy/Java的新手,在处理一个简单的正则表达式任务时遇到了一些困难。 我正在尝试修改一些文件对的标签。我的理解是,返回的数据结构形式如下: 我进一步认为: 对此列表中的项调用方法时,将给出名称,我在上面将其标记为 与一起使用的闭包返回的值设置文件对的名称。 与一起使用的闭包中的的值是文件对列表中的单个项。 但是,我在以下几个方面尝试了很多变体都没有成功: 我还尝试了

  • 这不是重复的...在我看来。我不是在问它的有用性。如果可以的话,我要求澄清定义。不要投反对票,请解释一下。如果我认为这篇文章对其他读者来说很愚蠢,我会删除它。 其中显示是这样的 如果后面是什么?:应为“普通括号的非捕获版本”。匹配括号内的任何正则表达式,但在执行匹配或稍后在模式中引用后,无法检索组匹配的子字符串。” 为什么它仍然返回字符串“animal=”? (Python 3.6.3)f是: