排除捕获组的正则表达式中间



我有一个字符串:

2km739

我正在尝试使用正则判断 2739

我知道我只能使用两个捕获组并在之后组合(编辑:捕获组后提取数值字符(,但是在这种情况下,这会容易一些,如果可能的话,我很好奇。

我有这个:

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

但是它不起作用

它仅在我在某处添加 km

时起作用
([0-9](?=[km])km(?<=[km])d+)

我也会认为这会起作用,但是我了解到非捕捉群体仍然被捕获,但是外部组

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

在您的正则是您使用 [km],这是字符类的符号,将匹配 km

也许是在积极的lookahead中捕获小组然后加入它们的选择:

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

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

demo

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

(d+)

您需要在末尾合并所有捕获的组,因为如果不关闭捕获组,您无法跳过输入部分。

最新更新