匹配以 2 个字母开头并以 3 个字母结尾的正则表达式

Posted

技术标签:

【中文标题】匹配以 2 个字母开头并以 3 个字母结尾的正则表达式【英文标题】:Regex for match beginning with 2 letters and ending with 3 letters 【发布时间】: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 这会向您显示结果并逐步通过表达式来显示匹配情况正在执行。当然,还有其他可用的网站 【参考方案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。”。您能否为此提供正则表达式?

以上是关于匹配以 2 个字母开头并以 3 个字母结尾的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤文本文件中以大写字母开头并以正整数结尾的行,并在 linux 的命令行上使用正则表达式?

正则表达式:数字开头中间字母结尾数字

求一个正则表达式: 以英文字母开头,只能包含英文字母、数字、下划线

将字母和数字匹配在一起或仅匹配字母的正则表达式

mysql 正则表达式 查询匹配 某个词

在正则表达式中查找带有大写字母并以某个单词结尾的字符串