首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于匹配3个字母和1-2个数字的RegEx

用于匹配3个字母和1-2个数字的RegEx
EN

Stack Overflow用户
提问于 2019-05-24 07:11:37
回答 2查看 4.4K关注 0票数 0

我正在尝试编写一个正则表达式,以便在至少包含100个字符的文本中查找匹配项。匹配应该是这样的-字符串中的任何子字符串开始时至少包含3个字母,后面至少有1个数字,3个字母后面最多有2个数字。

示例:

  1. abcjkhklfdpdn24hjkk -在本例中,我希望提取pdn24
  2. hjdksfkpdf1lkjk -在本例中,我希望提取pdf1
  3. hjgjdkspdg34kjfs dhj khk678jkfhlds1 -在本例中,我希望同时提取pdg34和lds1

我该如何为此编写一个正则表达式?匹配的起始字母长度始终为3,数字长度可以为1或2(不多也不少)

如果3个字母的字符串后面有2个数字,这就是工作。

[A-Za-z]{3}[0-9]{2}

但是数字的长度可以在1到2之间变化。如何在正则表达式中包含变化的长度?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-24 07:41:32

我们希望设计的表达式非常有趣。我们可以先在捕获组中添加您的原始表达式,稍作修改,然后我们应该考虑它周围的左右边界。例如,在右侧,我们可能希望使用\D

([A-Za-z]{3}[0-9]{1,2})\D

DEMO 1

我们当然可以定义一个精确的限制表达式。但是,这可能会起作用。

根据Cary Swoveland的建议,我们也可以使用这个表达式,这要好得多:

\p{L}{3}\d{1,2}(?!\d)

测试

re = /([A-Za-z]{3}[0-9]{1,2})\D/m
str = 'abcjkhklfdpdn24hjkk
hjdksfkpdf1lkjk
hjgjdkspdg34kjfs dhj khk678jkfhlds1 '

# Print the match result
str.scan(re) do |match|
    puts match.to_s
end

此脚本显示了捕获组的工作方式:

const regex = /([A-Za-z]{3}[0-9]{1,2})\D/gm;
const str = `abcjkhklfdpdn24hjkk
hjdksfkpdf1lkjk
hjgjdkspdg34kjfs dhj khk678jkfhlds1 `;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

票数 3
EN

Stack Overflow用户

发布于 2019-05-24 07:22:07

至少3个字母:[a-zA-Z]{3,} 1位或2位(不多不少):[0-9]{1,2}

这为我们提供了:

/[a-zA-Z]{3,}[0-9]{1,2}/
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56283981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档