如何使用 RegEx 在定界符之前捕获特定字符?

How can I capture specific characters before a delimiter using RegEx?

我正在尝试创建两个正则表达式来捕获欧洲车牌所需的字符。

我目前正在使用两个正则表达式

  1. 占领国家
    • (^[A-Z]{1,3}[\s])
  2. 占领区
    • (([^\s*-A-Z]{1,3}[*])|([^\s*-A-Z]{1,3}[-]))

以下是我拥有的车牌格式示例:

D HG-ABCDE : Country should be D, District should be HG
A S-FGHIJ  : Country should be A, District should be S 
D AC-KLMNO : Country should be D, District should be AC
A BR-PQRST : Country should be A, District should be BR
A RO*UVWXY : Country should be A, District should be RO

从我的字符串中获取所需信息后,我使用 java 代码删除不需要的信息,这是代码片段:

if (matcher.find()) {
        
        country_region = matcher.group(1);
        country_region = country_region.replace("*", "");
        country_region = country_region.replace("-", "");
        country_region = country_region.replaceAll("\s+$", "");            

    }

既然我已经解释了我的主题,这就是我遇到的问题。 我的 District RegEx 没有按预期工作,它选择了错误的字母,导致我之后的映射错误。不幸的是我找不到我的错误,我在这里寻求帮助!

我如何重写我的 District RegEx 以检索字母 在 space 将国家/地区与地区分开之后但在分隔符 * 或 - ?[=14 之前=]

非常感谢!

字符 class [^\s*-A-Z] 是一个取反字符 class 匹配除了列出的任何字符。这部分 \s*-A 表示从 ASCII 十进制数字 42-65 的范围,并且也不会匹配 A 字符。

如果您将其更改为 [\s*A-Z-]{1,3},它仍然会匹配 space 和匹配过多的连字符。


您可以使用 2 个捕获组,其中国家/地区在组 1 中,地区在组 2 中。

要匹配 -*,您可以使用字符 class [-*]

^([A-Z]{1,3})\h+([A-Z]{1,3})[-*][A-Z]{5}$

模式匹配:

  • ^ 字符串开头
  • ([A-Z]{1,3})组 1
  • 中捕获 1-3 次 A-Z
  • \h+ 匹配出现 1 次以上的水平白色space 字符
  • ([A-Z]{1,3}) 组 2
  • 中捕获 1-3 次 A-Z
  • [-*][A-Z]{5} 匹配 -* 和出现 5 次的 A-Z
  • $ 字符串结束

在Java

String regex = "^([A-Z]{1,3})\h+([A-Z]{1,3})[-*][A-Z]{5}$";

看到一个regex demo

只捕获前 2 个组,末尾没有字符且以单词边界开头:

\b([A-Z]{1,3})\h+([A-Z]{1,3})[-*]

Regex demo