我有一个字符串:
2km739
我正在尝试使用正则判断 2739
我知道我只能使用两个捕获组并在之后组合(编辑:捕获组后提取数值字符(,但是在这种情况下,这会容易一些,如果可能的话,我很好奇。
我有这个:
([0-9](?=[km])(?<=[km])d+)
但是它不起作用
它仅在我在某处添加 km
([0-9](?=[km])km(?<=[km])d+)
我也会认为这会起作用,但是我了解到非捕捉群体仍然被捕获,但是外部组
([0-9](?:km)d+)
在您的正则是您使用 [km]
,这是字符类的符号,将匹配 k
或 m
。
也许是在积极的lookahead中捕获小组然后加入它们的选择:
^(?=(d)km(d+))
str = "2km739"
reobj = re.compile(r"^(?=(d)km(d+))")
match = reobj.search(str)
print ''.join(match.groups())
demo
如果要删除所有字母并仅捕获数字,则可以更改捕获组来执行此操作。
(d+)
您需要在末尾合并所有捕获的组,因为如果不关闭捕获组,您无法跳过输入部分。