如何使用 RegEx 在定界符之前捕获特定字符?
How can I capture specific characters before a delimiter using RegEx?
我正在尝试创建两个正则表达式来捕获欧洲车牌所需的字符。
我目前正在使用两个正则表达式
- 占领国家
(^[A-Z]{1,3}[\s])
- 占领区
(([^\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})[-*]
我正在尝试创建两个正则表达式来捕获欧洲车牌所需的字符。
我目前正在使用两个正则表达式
- 占领国家
(^[A-Z]{1,3}[\s])
- 占领区
(([^\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})[-*]