【问题标题】:Regex for match beginning with 2 letters and ending with 3 letters匹配以 2 个字母开头并以 3 个字母结尾的正则表达式
【发布时间】:2021-01-10 10:52:15
【问题描述】:

示例输入:

'Please find the ref AB45676785567XYZ. which is used to identify reference number'

示例输出:

'AB45676785567XYZ'

我需要一个RegExp 来返回完全符合我要求的匹配项;即前 2 个和后 3 个字符是字母的子字符串。

前 2 个和后 3 个字母未知。

我试过这个RegExp:

[a-zA-Z]{2}[^\s]*?[a-zA-Z]{3}

但它与预期不匹配。

【问题讨论】:

  • 如果您不确定,或者无法确定正则表达式应该是什么,请尝试使用regex tester 这会向您显示结果并逐步通过表达式来显示匹配情况正在执行。当然,还有其他可用的网站

标签: javascript c# regex jscript


【解决方案1】:

您当前的RegExp 与以下标有代码块的单词匹配:

Please 找到引用 AB45676785567XYZ。用于identifyreferencenumber

这是因为您的RegExp[a-zA-Z]{2}[^\s]*?[a-zA-Z]{3} 要求:

  • [a-zA-Z]{2} 以 2 个字母开头(大小写)
  • [^\s]*? 包含非空格的任何内容
  • [a-zA-Z]{3} 以 3 个字母结尾(无论大小写)

在您当前的示例中,仅将字母限制为大写只会匹配您寻求的匹配项:

[A-Z]{2}[^\s]+[A-Z]{3}

或者,要求 2 个开头和 3 个结尾字母之间的数字也会产生您想要的匹配:

[a-zA-Z]{2}\d+[a-zA-Z]{3}

【讨论】:

  • 它甚至可以匹配AB45676785567XYZ-some in AB45676785567XYZ-some more text
  • 假设我的文本将是“请找到用于识别参考号的 ref AB45676abc85567XYZ。”。您能否为此提供正则表达式?
  • [A-Z]{2}[^\s]+[A-Z]{3}
【解决方案2】:

这里真正重要的是单词边界\b,试试:\b[a-zA-Z]{2}\w+[a-zA-Z]{3}\b

解释:

\b - 字边界

[a-zA-Z]{2} - 匹配任意字母,2 次​​p>

\w+ - 匹配一个或多个单词字符

[a-zA-Z]{3} - 匹配任意字母,3 次

\b - 字边界

Demo

注意您的要求是模棱两可的,因为任何由 5 个或更多字母组成的单词都会匹配该模式

【讨论】:

    【解决方案3】:

    以 2 个字母开头:

    [a-zA-Z]{2}
    

    中间的数字:

    \d+
    

    以 3 个字母结尾:

    [a-zA-Z]{3}
    

    完整的正则表达式:

    [a-zA-Z]{2}\d+[a-zA-Z]{3}
    

    如果中间的文字是字母数字,你可以使用这个:

    [A-Z]{2}[^\s]+[A-Z]{3}
    

    【讨论】:

    • 如果字符串只包含字母怎么办?它仍然符合 OP 要求。
    • 假设我的文本将是“请找到用于识别参考号的 ref AB45676abc85567XYZ。”。您能否为此提供正则表达式?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2013-04-22
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    相关资源
    最近更新 更多