首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RegEx:将所有结果的量词添加到捕获组

RegEx:将所有结果的量词添加到捕获组
EN

Stack Overflow用户
提问于 2019-06-11 03:46:47
回答 2查看 105关注 0票数 0

我有以下有效的字符串...

代码语言:javascript
复制
 "   1"
 "  12"
 " 123"
 "1234"
 " 123"
 " 12A"
 ""

以下字符串无效...

代码语言:javascript
复制
"   1234"
" 1234"
"0 12"
"0012"

目前,我使用以下正则表达式匹配来检查字符串是否有效...

代码语言:javascript
复制
"(|[0-9A-Z\-]{4}| {1}[0-9A-Z\-]{3}| {2}[0-9A-Z\-]{2}| {3}[0-9A-Z\-]{1})"

注意:为了清楚起见,上面的正则表达式不能满足我的要求,这就是我问这个问题的原因。

我希望有一个更简单的匹配我可以使用,就像下面这样…

代码语言:javascript
复制
"(| {0,3}[0-9A-Z\-]{1,4})"

我唯一的问题是,上面的也会像" 1234"一样匹配,这是不能接受的。有没有办法将我的捕获组限制在4个字符以内?

EN

回答 2

Stack Overflow用户

发布于 2019-06-11 04:18:41

这将通过您的所有测试用例:

代码语言:javascript
复制
"(|[1-9\s][0-9A-Z\s]{2}[0-9A-Z])"

尽管我怀疑有些情况你可能没有提到。

说明:匹配双引号中的0或4个字符。第一个字符可以是空格或数字,但不能是零。接下来的两个字符是任意数字、大写字母或空格。第四个字符是数字或大写,但不是空格。

票数 2
EN

Stack Overflow用户

发布于 2019-06-11 04:34:58

要提高效率,请执行以下操作:

"(?:[A-Z\d-]{4}|[ ](?:[A-Z\d-]{3}|[ ](?:[A-Z\d-]|[ ])[A-Z\d-]))"

https://regex101.com/r/1fr9tb/1

代码语言:javascript
复制
 "
 (?:
      [A-Z\d-]{4} 
   |  [ ]
      (?:
           [A-Z\d-]{3} 
        |  [ ]
           (?: [A-Z\d-] | [ ] )
           [A-Z\d-]
      )
 )
 "

基准测试

代码语言:javascript
复制
Regex1:   "(?:[A-Z\d-]{4}|[ ](?:[A-Z\d-]{3}|[ ](?:[A-Z\d-]|[ ])[A-Z\d-]))"
Options:  < none >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   7
Elapsed Time:    0.66 s,   663.84 ms,   663843 µs
Matches per sec:   527,233


Regex2:   "(|[0-9A-Z\-]{4}|[ ]{1}[0-9A-Z\-]{3}|[ ]{2}[0-9A-Z\-]{2}|[ ]{3}[0-9A-Z\-]{1})"
Options:  < none >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   7
Elapsed Time:    0.94 s,   938.44 ms,   938438 µs
Matches per sec:   372,960


Regex3:   "(?="|.{4}")(?![ ]*0)[0-9A-Z -]*"
Options:  < none >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   6
Elapsed Time:    0.73 s,   728.48 ms,   728484 µs
Matches per sec:   411,814

Regex4:   "(|[1-9\s][0-9A-Z\s]{2}[0-9A-Z])"
Options:  < none >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   6
Elapsed Time:    0.85 s,   851.48 ms,   851481 µs
Matches per sec:   352,327
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56532675

复制
相关文章

相似问题

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