首页 > 解决方案 > 正则表达式 - 以更简洁的方式重复捕获组模式

问题描述

我开始研究正则表达式,我得到了以下问题。正文如下:

00 0-23/2 * *   *   ubuntu  source /home/ubuntu/virtualenv/  .........
10 17 8 1,3,6,12 * ubuntu source /home/ubuntu/virtualenv/   .............
25 6    * * *   root    test -x /usr/sbin/anacron || ( .....................
47 6    * * 7   root    test -x /usr/sbin/anacron || ( ......................
52 6    1 * *   root    test -x /usr/sbin/anacron ||....................

我用这个正则表达式,python re包:

"[\d\*,/-]+\s{1,}[\d\*,/-]+\s{1,}[\d\*,/-]+\s{1,}[\d\*,/-]+\s{1,}[\d\*,/-]+"

它返回我每行的前 5 个数字信息。但是写5遍就不好了[\d\*,/-]+……

我尝试了类似或符号的变体(([\d\*,/-]+)\s{1,}){5},以获取感兴趣的捕获组并重复它。(?([\d\*,/-]+)\s{1,}){5}()

我的感觉是我没有理解这个符号,或者还有另一种合适的语法来解决我想要解决的问题(避免[\d\*,/-]+重复)。

你可以帮帮我吗?

谢谢!

标签: pythonregex

解决方案


假设您想保留捕获的数据,您可能只是缺少一个围绕重复捕获组的捕获组,以便您的正则表达式捕获的不仅仅是最后一次出现的数据。

(([\d*,/-]+\s+){5})

使用了类似的东西:

import re
inputString = ...
expression = re.compile("(([\d*,/-]+\s+){5})")
matches = expression.findall(inputString)
print(matches)

可能有用的参考资料:


推荐阅读