Java正则表达式:我可以仅使用一个正则表达式来匹配组吗?

马丁

我有一个遵循以下规则的字符串:

  1. 添加一个大写字母,对于整个字符串来说是唯一的。
  2. 然后添加一组或多组\ d + z模式,其中\ d是一个数字,即一个或多个数字后跟一个'z'。
  3. 重复上述1和2,零次或更多次。

遵循上述规则的示例字符串为:

"A42z19z037z21z"      +
"B942z21z4842z"       +
"C33z449z3884z68z20z"

(这是一个为外观而分解的字符串。)

我需要一个有效执行以下操作的正则表达式:

  1. 转到指定的大写字母,例如“ B”。
  2. 在此大写字母和下一个大写字母之间匹配每组\ d + z(请参阅上面的规则2)。

这似乎需要两个单独的正则表达式,一个用于查找“ B”的位置,然后一个用于匹配组,直到下一个大写字母为止。可以在一个正则表达式中完成吗?

编辑:

因此,使用上面的示例,匹配项将为“ 942z”,“ 21z”和“ 4842z”。

威克多·斯特里比尤(WiktorStribiżew)

回答这个问题:您不能使用Java regex将一个捕获组与后面带有一个量词的捕获组(又称为重复捕获组匹配并捕获多个组

我建议使用带有-\G基于边界的正则表达式

([A-Z]|(?!\A)\G)(\d+z)

正则表达式演示

图案细节

  • ([A-Z]|(?!\A)\G) -组1捕获大写ASCII字母或上一次成功匹配的末尾
  • (\d+z)-第2组捕获1个以上的数字和一个z

这是一个Java演示

String value1 = "A42z19z037z21zB942z21z4842zC33z449z3884z68z20z";
String pattern1 = "([A-Z]|(?!\\A)\\G)(\\d+z)";
Pattern ptrn = Pattern.compile(pattern1);
Matcher matcher = ptrn.matcher(value1);
ArrayList<ArrayList<String>> result_lst = new ArrayList<ArrayList<String>>();
ArrayList<String> lst = null;
while (matcher.find()) {
    if (!matcher.group(1).equals("")) {
        if (lst != null) result_lst.add(lst);
        lst = new ArrayList<String>();
        lst.add(matcher.group(1));
    }
    else {
        lst.add(matcher.group(2));
    }
}
if (lst != null) result_lst.add(lst);
System.out.println(result_lst);

输出: [[A, 19z, 037z, 21z], [B, 21z, 4842z], [C, 449z, 3884z, 68z, 20z]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python正则表达式:仅获取一个匹配的表达式

来自分类Dev

正则表达式仅匹配一组

来自分类Dev

正则表达式可以从整行或仅到给定令牌创建一个组

来自分类Dev

我需要一个正则表达式来匹配人为事实

来自分类Dev

是否有正则表达式仅使用一个钩子 [] 来匹配字母 exept 元音?

来自分类Dev

正则表达式对另一个正则表达式的匹配结果使用条件

来自分类Dev

仅使用Javascript正则表达式匹配模式的最后一个实例

来自分类Dev

使用正则表达式仅匹配特定单词中的一个单词

来自分类Dev

一个简单的正则表达式匹配

来自分类Dev

我们可以通过在记事本中使用另一个正则表达式来查找和替换正则表达式吗?

来自分类Dev

正则表达式匹配组

来自分类Dev

使正则表达式仅匹配捕获组

来自分类Dev

正则表达式-我需要使用正则表达式匹配路径中反斜杠的最后一个实例

来自分类Dev

正则表达式-我需要使用正则表达式匹配路径中反斜杠的最后一个实例

来自分类Dev

javascript正则表达式匹配仅返回最后一个匹配

来自分类Dev

仅匹配正则表达式行中的第一个匹配项

来自分类Dev

匹配直到正则表达式中的另一个表达式

来自分类Dev

在另一个正则表达式匹配文本之后匹配文本的正则表达式

来自分类Dev

需要一个正则表达式来匹配多个类之一

来自分类Dev

正则表达式最佳实践:可以使用正则表达式匹配多个短语吗?

来自分类Dev

仅需一个捕获组即可帮助重写正则表达式

来自分类Dev

如何在一个正则表达式中捕获所有正则表达式组?

来自分类Dev

Python正则表达式返回最后一个匹配字符的额外捕获组

来自分类Dev

基于第一个条目的正则表达式组匹配

来自分类Dev

带有可选组的Python正则表达式,至少匹配一个

来自分类Dev

在正则表达式中将单词作为一个组进行匹配

来自分类Dev

正则表达式:跳过组中角色的第一个匹配项?

来自分类Dev

正则表达式匹配一个或多个组太多

来自分类Dev

如何在递归正则表达式中匹配一个组?

Related 相关文章

  1. 1

    Python正则表达式:仅获取一个匹配的表达式

  2. 2

    正则表达式仅匹配一组

  3. 3

    正则表达式可以从整行或仅到给定令牌创建一个组

  4. 4

    我需要一个正则表达式来匹配人为事实

  5. 5

    是否有正则表达式仅使用一个钩子 [] 来匹配字母 exept 元音?

  6. 6

    正则表达式对另一个正则表达式的匹配结果使用条件

  7. 7

    仅使用Javascript正则表达式匹配模式的最后一个实例

  8. 8

    使用正则表达式仅匹配特定单词中的一个单词

  9. 9

    一个简单的正则表达式匹配

  10. 10

    我们可以通过在记事本中使用另一个正则表达式来查找和替换正则表达式吗?

  11. 11

    正则表达式匹配组

  12. 12

    使正则表达式仅匹配捕获组

  13. 13

    正则表达式-我需要使用正则表达式匹配路径中反斜杠的最后一个实例

  14. 14

    正则表达式-我需要使用正则表达式匹配路径中反斜杠的最后一个实例

  15. 15

    javascript正则表达式匹配仅返回最后一个匹配

  16. 16

    仅匹配正则表达式行中的第一个匹配项

  17. 17

    匹配直到正则表达式中的另一个表达式

  18. 18

    在另一个正则表达式匹配文本之后匹配文本的正则表达式

  19. 19

    需要一个正则表达式来匹配多个类之一

  20. 20

    正则表达式最佳实践:可以使用正则表达式匹配多个短语吗?

  21. 21

    仅需一个捕获组即可帮助重写正则表达式

  22. 22

    如何在一个正则表达式中捕获所有正则表达式组?

  23. 23

    Python正则表达式返回最后一个匹配字符的额外捕获组

  24. 24

    基于第一个条目的正则表达式组匹配

  25. 25

    带有可选组的Python正则表达式,至少匹配一个

  26. 26

    在正则表达式中将单词作为一个组进行匹配

  27. 27

    正则表达式:跳过组中角色的第一个匹配项?

  28. 28

    正则表达式匹配一个或多个组太多

  29. 29

    如何在递归正则表达式中匹配一个组?

热门标签

归档