当前位置: 首页 > 面试题库 >

如何将正则表达式与具有未知组数的分组匹配

穆才良
2023-03-14
问题内容

我想在程序的输出日志上进行正则表达式匹配(在Python中)。日志包含如下几行:

... 
VALUE 100 234 568 9233 119
... 
VALUE 101 124 9223 4329 1559
...

我想捕获在以VALUE开头的行的第一次出现之后出现的数字列表。即,我希望它返回('100','234','568','9233','119')。问题是我事先不知道会有多少个数字。

我试图将其用作正则表达式:

VALUE (?:(\d+)\s)+

这与行匹配,但只捕获了最后一个值,所以我得到了(‘119’,)。


问题答案:

您要查找的是 解析器
,而不是正则表达式匹配项。在您的情况下,我会考虑使用一个非常简单的解析器split()

s = "VALUE 100 234 568 9233 119"
a = s.split()
if a[0] == "VALUE":
    print [int(x) for x in a[1:]]

您可以使用正则表达式查看输入行是否符合预期格式(使用问题中的正则表达式),然后可以运行上述代码,而无需检查"VALUE"并知道int(x)转换将始终成功,因为您已经确认以下字符组均为数字。



 类似资料:
  • 问题内容: 说我的数据看起来像这样: 我可以创建一个正则表达式 要将名称,年龄和id匹配到第1组中,将peter,40、99匹配到第2组中。但是,我要迭代甚至选择地遍历这些组。例如, 如果group1值是id,我想进行其他处理。所以算法就像 我想做的第二件事就是跳转到匹配的group1的第三个实例,并获取键“ id”,而不是进行迭代。 问题答案: 使用FindAllStringSubmatch查找

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 本文向大家介绍JavaScript正则表达式的分组匹配详解,包括了JavaScript正则表达式的分组匹配详解的使用技巧和注意事项,需要的朋友参考一下 分组 下面的正则表达式可以匹配kidkidkid: 而另一种更优雅的写法是: 这里由圆括号包裹的一个小整体称为分组。 候选 一个分组中,可以有多个候选表达式,用|分隔: 这里的|相当于“或”的意思。 捕获与引用 被正则表达式匹配(捕获)到的字符串会

  • 问题内容: 在Java中,我试图将所有正则表达式匹配项返回到数组,但是似乎您只能检查模式是否匹配某些内容(布尔值)。 如何使用正则表达式匹配在给定字符串中形成所有与正则表达式匹配的字符串数组? 问题答案: (如果你可以假设,则4castle的答案比下面的要好) 你需要创建一个匹配器,并使用它来迭代查找匹配项。 之后,包含匹配项,如果你确实需要一个数组,则可以使用它来获取一个数组。 返回了当前组状态

  • null A-ZA-Z0-90,3)(?ltSerialMarket&>A-ZA-Z0,2)(?ltSerialSuffix&>a-zA-Z0-9*)/code> 基本上它说: 这意味着: 匹配1 完全匹配0-8 组 0-3 abc 组 3-5 fo 组 5-8条 上述案例是预期结果。 当regex失败时,因为第4个和第5个字符是数字而不是字母,所以它失败了,这是正确的。问题是应该与第二组匹配的字

  • 我正在使用一些构建,并且必须编写一个正则表达式以包含一些分支,但排除其他分支(以便创建构建)。 我能想到的最好的是这个正则表达式,它使用正面和负面的前瞻性来匹配分支名称: 以下是分支名称以及它们应该如何匹配: 请使用这个在线工具(这是我发现的唯一一个支持负和正先行正则表达式的工具)。 现在,我提出的正则表达式工作正常,除了以下两个分支: 不包括它们的原因是因为我使用了这个负前瞻正则表达式,它排除了