gpt4 book ai didi

regex - 在正则表达式模式中重复组模式

转载 作者:行者123 更新时间:2023-12-04 07:08:13 25 4
gpt4 key购买 nike

所以,伙计们,我有这个自制的模式有效。几个小时后(我不是正则表达式大师)这只小狗进化为我解析 curl PUT 输出:

   ^\s*([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)
\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)\s+([^ ]+)

(文本中的 CR 仅用于格式化)

它为我提供了可以访问的“组”——它有效!然而,我内心的编码人员看到了模式的重复,这让我很不爽。多年来,我已经看到 perl 的“你的模式有多小”竞赛,这让我觉得这可能要小得多。但是我试图在其中打一个 * 却惨遭失败。

所以, 问题是 :如何以更简洁的方式编写此模式,以便我仍然可以拉出我的目标群体?

这可能无关紧要,但这里是我所追求的组:
$1: percent finished
$2: size uploaded so far
$6: size to upload
$8: average upload rate

更新:可以在我的博客文章 ( How to configure OnMyCommand to generate a progress bar for curl ) 上找到更多背景,这将解释我在做什么以及为什么我只追求正则表达式模式。我实际上并不是在用一种语言编码,本身……而是配置一个工具来使用正则表达式。

最佳答案

看起来这是我能做的最好的:

^\s*([^ ]+)\s+([^ ]+)\s+(?:[^ ]+\s+){3}([^ ]+)\s+[^ ]+\s+([^ ]+)\s+

我折叠了您不关心的匹配项,使它们不被捕获,并留下了不需要的尾随匹配项。如果匹配所有内容很重要(例如,还有其他行可以匹配),您可以说:
^\s*([^ ]+)\s+([^ ]+)\s+(?:[^ ]+\s+){3}([^ ]+)\s+[^ ]+\s+([^ ]+)(?:\s+[^ ]){4}

请注意,我的更改也会更改捕获编号:
  • 1 美元:完成百分比
  • $2:目前上传的尺寸
  • $3:上传大小
  • $4:平均上传率

  • 如果它支持\S,您也许可以摆脱它
    ^\s*(\S+)\s+(\S+)\s+(?:\S+\s+){3}(\S+)\s+\S+\s+(\S+)\s+

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

    关于regex - 在正则表达式模式中重复组模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/779245/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com