有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java正则表达式的麻烦

我有一个字符串需要使用正则表达式提取。最好只使用一个正则表达式。因为它与9个预先存在的正则表达式一起在循环中使用(也就是说,我可以将它添加到可用正则表达式的ArrayList中)

弦的模式永远是 在{4,8}A-Z0-9之间。后跟,
[A-Z]{1}或[A-Z0-9]{2}或另一个[A-Z0-9]{4,8}

例如:

“A1B1C1 ABCD E FGHI JK X0Y0Z0”

我希望这能让你赢回四场比赛

A1B1C1 & ABCD E & FGHI JK & X0Y0Z0

我一直在尝试匹配{4,8}特征的第一部分,然后是{1,2}的非贪婪匹配。例如:

[A-Z0-9]{4,8}(\\s{1}[A-Z0-9]{1,2})*?   &&   [A-Z0-9]{4,8}(\\s{1}[A-Z]{1}|\\s{1}[A-Z0-9]{2})*?

但这永远不会返回超过第一个{4,8}字符


共 (1) 个答案

  1. # 1 楼答案

    您可以使用带有单词边界和可选部分来匹配[A-Z0-9]{2}[A-Z]

    \b[A-Z0-9]{4,8}(?:\h+(?:[A-Z0-9]{2}|[A-Z]))?\b
    
    • \b单词边界
    • [A-Z0-9]{4,8}匹配4-8次A-Z0-9
    • (?:非捕获组
      • \h+匹配1+水平空白字符
      • (?:[A-Z0-9]{2}|[A-Z])匹配2个A-Z0-9或1个A-Z
    • )?关闭非捕获组并将其设置为可选
    • \b单词边界

    Regex demo| Java demo

    在爪哇

    String regex = "\\b[A-Z0-9]{4,8}(?:\\h+(?:[A-Z0-9]{2}|[A-Z]))?\\b";