【问题标题】:Regex pattern to match only two characters between commas in Java正则表达式模式仅匹配 Java 中逗号之间的两个字符
【发布时间】:2016-04-12 22:29:58
【问题描述】:

例如,在这个字符串“3F、4B、AA、A4B”中,我想要一个能够捕获 3F、4B 和 AA 的正则表达式模式。逗号之间的字符数必须为 2。唯一的例外是如果两个字符都是数字,我们不想接受。我们也不关心空白。

【问题讨论】:

    标签: java regex pattern-matching


    【解决方案1】:

    你可以使用这个前瞻正则表达式:

    \b([a-zA-Z][a-zA-Z\d]|\d[a-zA-Z])(?=\s*,)
    
    • \b 用于单词边界。
    • 正向前瞻,(?=\s*,) 断言在 2 个字符后有以下 ,
    • ([a-zA-Z][a-zA-Z\d]|\d[a-zA-Z]) 确保我们在 2 个字符中至少使用一个字母

    在 Java 中:

    Pattern p = Pattern.compile("\\b([a-zA-Z][a-zA-Z\\d]|\\d[a-zA-Z])(?=\\s*,)");
    

    RegEx Demo

    【讨论】:

    • 非常感谢!我只有一个后续问题....如果逗号之间的所有值都有效,是否可以让这个正则表达式接受整个字符串(包括逗号)? (2个字符,至少一个是字母)
    • 您可以使用\b(?:(?:[a-zA-Z][a-zA-Z\d]|\d[a-zA-Z])\s*,\s*)+ 匹配包括逗号在内的完整字符串。此外,您无需删除接受标记即可提出问题。您可以将 cmets 留在这里,即使我接受了答案,我也会在在线时尝试回答。
    【解决方案2】:

    尝试以下正则表达式:

    \b(\d[a-z]|[a-z]\d|[a-z]{2})(?=\b)
    

    这将仅捕获由字母数字或仅由字母组成的两个字母。

    Regex101查看演示

    【讨论】:

      猜你喜欢
      • 2012-08-08
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 2011-09-02
      相关资源
      最近更新 更多