排除捕获组正则表达式

时间:2018-03-30 21:18:03

标签: python regex

我有一个字符串:

2km739

我正在尝试使用正则表达式捕获2739

我知道我可以使用两个捕获组并将它们组合起来(编辑:或者在捕获组后提取数字字符),但在这种情况下这会更容易一些,如果可能的话我很好奇。

我有这个:

([0-9](?=[km])(?<=[km])\d+)

但它不起作用

仅当我在某处添加km

时才有效
([0-9](?=[km])km(?<=[km])\d+)

我也认为这会起作用,但我学会了非捕获组仍然可以捕获但外部组

([0-9](?:km)\d+)

2 个答案:

答案 0 :(得分:0)

如果要删除所有字母并仅捕获数字,可以更改捕获组以执行此操作。

(\d+)

您需要在最后合并所有捕获的组,因为您无法在不关闭捕获组的情况下跳过输入的部分。

答案 1 :(得分:0)

在你的正则表达式中,你使用[km]这是character class的符号,并且会匹配km

也许可以选择以积极的前瞻方式捕捉群组,然后加入群组:

^(?=(\d)km(\d+))

str = "2km739"
reobj = re.compile(r"^(?=(\d)km(\d+))")
match = reobj.search(str)
print ''.join(match.groups())

Demo