我正在嘗試創建兩個正則運算式來捕獲歐洲車牌所需的字符。
值得一提的是
- 將國家/地區與其他國家/地區(第一個字母)分開的分隔符始終是
* (asterisk) or a - (hyphen) - 將區與右側其他字符分隔的分隔符始終為
a - (hyphen) - 區還可以包含字母,例如 ?,?,ü
車牌長這樣:
A*S-XXXPA
A*SL-XXXPC
A*SL-XXXSD
A*HA-XXXHV
D*R-XXXXX
D*TS-XXXXX
A*VB-1XXXXX
我用于捕獲國家和地區的 RegEx 如下。
String country = "^([A-Z]{1,3})";
String district = "\\h*(\\p{L}{1,3})[-*]";
從字串中獲取所需資訊后,我將使用 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 $", "");
}
我的正則運算式捕獲國家作業正常,這是一個例子:
- https://regex101.com/r/jfhSJN/1
我遇到的問題是我用來捕獲地區的 RegEx。目前它也抓住了國家......
- https://regex101.com/r/57ZE9O/1
我想我可以洗掉正則運算式末尾的星號,但我認為這不是最干凈的方法。
謝謝!
uj5u.com熱心網友回復:
地區正則運算式的主要問題是\h*匹配任何零個或多個水平空格。所以匹配也可以發生在字串的開頭。
由于您想在水平空格之后獲得匹配,*或者-,您可以使用
[*\h-](\p{L}{1,3})[-*]
請參閱正則運算式演示。在這里,[*\h-]匹配 a *、水平空白或-字符。
但是,在將所有部分捕獲到組中的同時使用正則運算式來匹配攪拌是有意義的:
^([A-Z]{1,3})[\h*-](\p{L}{1,3})[-*](. )
請參閱此正則運算式演示。詳情:
^- 字串的開始([A-Z]{1,3})- 第 1 組:一個、兩個或三個大寫字母[\h*-]- 水平空白,*或-(\p{L}{1,3})- 第 2 組:一到三個任何 Unicode 字母[-*]- 一個-或*字符(. )- 第 3 組:直到字串/行末尾的所有文本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/389375.html
