匹配以 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
。用于identify
reference
number
这是因为您的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 的命令行上使用正则表达式?