当前位置:  开发笔记 > 编程语言 > 正文

如何使这个正则表达式更紧凑?

如何解决《如何使这个正则表达式更紧凑?》经验,为你挑选了1个好方法。

假设我有一行这样的文字

Small   0.0..20.0   0.00    1.49    25.71   41.05   12.31   0.00    80.56

我想捕获最后六个数字并忽略Small和前两组数字.

对于本练习,让我们忽略这样一个事实,即只做一些字符串拆分而不是正则表达式可能更容易.

我有这个正则表达式,但有点可怕

^(Small).*?[0-9.]+.*?[0-9.]+.*?([0-9.]+).*?([0-9.]+).*?([0-9.]+).*?([0-9.]+).*?([0-9.]+).*?([0-9.]+)

有没有办法压缩那个?

例如,是否可以将最后6个数字的检查组合成一个语句,该语句仍然将结果存储为6个单独的组匹配?



1> Tim Pietzcke..:

如果你想把每个比赛都放在一个单独的反向引用中,你别无选择,只能"拼写出来" - 如果你使用重复,你可以将"所有六个组"作为一个"或"只记录最后一个,这取决于你在哪里把捕获括号.所以不,不可能压缩正则表达式并且仍然保留所有六个单独的匹配.

一个更有效(虽然不漂亮)的正则表达式将是:

^Small\s+[0-9.]+\s+[0-9.]+\s+([0-9.]+)\s+([0-9.]+)\s+([0-9.]+)\s+([0-9.]+)\s+([0-9.]+)\s+([0-9.]+)

因为它明确地匹配空格.你的正则表达式将导致大量的回溯.我的正则表达式分为28步,你的是106.

旁白:在Python中,你可以简单地做一个

>>> pieces = "Small   0.0..20.0   0.00    1.49    25.71   41.05   12.31   0.00    80.56".split()[-6:]
>>> print pieces
['1.49', '25.71', '41.05', '12.31', '0.00', '80.56']

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有