【问题标题】:Ignore specific characters before a delimiter with RegEx使用 RegEx 忽略分隔符前的特定字符
【发布时间】:2022-01-22 03:02:30
【问题描述】:

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

重要的是要提一下

  • 国家 与其他国家/地区(第一个字母)分开的分隔符始终是 * (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

我用来捕捉国家和地区的正则表达式如下。

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+$", "");            

    }

我捕获国家/地区的正则表达式工作正常,这是一个示例:

我遇到麻烦的是我用来捕获地区的 RegEx。目前它还赶上了国家...

我想我可以删除 RegEx 末尾的星号,但我认为这不是最干净的方法。

谢谢!

【问题讨论】:

    标签: java regex


    【解决方案1】:

    地区正则表达式的主要问题是\h* 匹配任何零个或多个水平空格。所以匹配也可以出现在字符串的开头。

    由于您想在水平空格后得到匹配,*-,您可以使用

    [*\h-](\p{L}{1,3})[-*]
    

    请参阅regex demo。这里,[*\h-] 匹配 *、水平空格或 - 字符。

    但是,在将所有部分捕获到组中时,使用正则表达式来匹配搅拌是有意义的:

    ^([A-Z]{1,3})[\h*-](\p{L}{1,3})[-*](.+)
    

    this regex demo详情

    • ^ - 字符串开头
    • ([A-Z]{1,3}) - 第 1 组:一个、两个或三个大写字母
    • [\h*-] - 水平空格,*-
    • (\p{L}{1,3}) - 第 2 组:一到三个任意 Unicode 字母
    • [-*] - -* 字符
    • (.+) - 第 3 组:直到字符串/行结尾的所有文本。

    【讨论】:

    • 嗨@Wiktor Stribiżew - 非常感谢您的精彩解释和回答。就我而言,我明确希望在没有组的情况下工作,以防止 Java 代码发生变化。仅对地区来说可能吗?
    • @Djabone 是的,请参阅 (?<=[*\h-])\p{L}{1,3}(?=[-*]) demo here
    • 如果我做得好,请告诉我好吗? (?<=[*\h-]) positive lookbehind - searches for - but only if there's a * before it? \p{L}{1,3} matches any letter from any language between 1 and 3 characters. ?=[-*] lost me here。非常感谢您的帮助
    • @Djabone No. (?<=[*\h-]) - 需要*- 或hor 的正向前瞻。当前位置左侧的空格。您正确理解\p{L}{1,3}(?=[\h-]) 是一个积极的前瞻,需要一个 hor.空格或- 紧挨当前位置的右侧。
    猜你喜欢
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多