首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式中组模式的重复

正则表达式中组模式的重复
EN

Stack Overflow用户
提问于 2009-04-22 21:11:04
回答 3查看 3.8K关注 0票数 2

所以,各位,我有一个自我设计的模式,可以工作。过了几个小时(我不是正则大师),这只小狗进化到为我解析卷曲输出:

代码语言:javascript
复制
   ^\s*([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)
    \s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)

(CR仅用于格式设置)

它给了我访问的“团体”然而,我的编码器看到一个模式的重复,它使我感到烦恼。多年来,我见过perl如何小即你的模式竞赛,这使我认为这可能要小得多。但是我的尝试却以惨败告终。

因此,的问题是:如何以更简洁的方式编写这个模式,以便我仍然可以提取目标组?

这可能并不重要,但下面是我要找的几个小组:

代码语言:javascript
复制
$1: percent finished
$2: size uploaded so far
$6: size to upload
$8: average upload rate 

更新:在我的博客(如何配置OnMyCommand以生成curl进度条)上可以找到更多的背景信息,这篇文章将解释我在做什么,以及为什么我只追求正则表达式。实际上,我并不是用语言编写代码,而是按照se...but配置工具来使用regex。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-22 21:32:42

看来这是我所能做的最好的了:

代码语言:javascript
复制
^\s*([^ ]+)\s+([^ ]+)\s+(?:[^ ]+\s+){3}([^ ]+)\s+[^ ]+\s+([^ ]+)\s+

我破坏了你不关心的火柴,使它们不被捕获,并停止了不必要的拖尾火柴。如果匹配所有内容都很重要(例如,还有其他行可以与此匹配),您可以这样说:

代码语言:javascript
复制
^\s*([^ ]+)\s+([^ ]+)\s+(?:[^ ]+\s+){3}([^ ]+)\s+[^ ]+\s+([^ ]+)(?:\s+[^ ]){4}

注意,我的更改还更改了捕获号:

  • 1美元:完成百分比
  • $2:到目前为止上传的大小
  • 3美元:上传的大小
  • 4美元:平均上传率

如果它支持\S,你可能会逃脱

代码语言:javascript
复制
^\s*(\S+)\s+(\S+)\s+(?:\S+\s+){3}(\S+)\s+\S+\s+(\S+)\s+

但这并不意味着完全相同的事情。

票数 3
EN

Stack Overflow用户

发布于 2009-04-22 21:19:07

代码语言:javascript
复制
((^\s*|\s+)([^ ]+)){12}

如果您不关心匹配的数量,并希望匹配一个完整的字符串,只需坚持以下几点。

代码语言:javascript
复制
((^\s*|\s+)([^ ]+))*\s*$
票数 0
EN

Stack Overflow用户

发布于 2009-04-22 21:34:40

如果您的regex使用贪婪匹配,这可能会奏效:

代码语言:javascript
复制
^(\s*([^ ]+))+$

说明:

  • ^=行的开头
  • 重复模式=s*(^ +)
  • 用parens包围它,并添加“+”以指示“前面的一个或多个匹配项”
  • 美元=行尾
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/779245

复制
相关文章

相似问题

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