Python 如何使用正则表达式捕获未指定长度的前几个数字?

Python 如何使用正则表达式捕获未指定长度的前几个数字?,python,regex,Python,Regex,我有一个未指定长度的数字,后跟一个15位数字 例如: (未指定长度的随机数)+15位数字-->3+15位数字 (未指定长度的随机数)+15位数字-->32831+15位数字 (未指定长度的随机数)+15位数字-->31+15位数字 我可以在Python中使用正则表达式捕获“第1部分”(长度不确定)和最后15位数字作为“第2部分”吗?尝试以下正则表达式: ^(\d+)(\d{15})$ 说明: ^ Start of string $ End of string \d

我有一个未指定长度的数字,后跟一个15位数字

例如:

(未指定长度的随机数)+15位数字-->3+15位数字

(未指定长度的随机数)+15位数字-->32831+15位数字

(未指定长度的随机数)+15位数字-->31+15位数字


我可以在Python中使用正则表达式捕获“第1部分”(长度不确定)和最后15位数字作为“第2部分”吗?

尝试以下正则表达式:

^(\d+)(\d{15})$
说明:

^      Start of string
$      End of string
\d     Any digit
{15}   Repeat 15 times
+      Repeat one or more times.
(...)  Capturing group

当然,使用regex
(\d*)(\d{15})
,或者overkill
(?

在我看来,您需要的只是最后15个字符以外的所有字符,为什么要使用正则表达式来完成这个简单的任务呢?我们只需获取字符串的部分(如果之前是数字,只需转换为字符串,执行此操作,然后再转换回):



非常简单。

澄清一下,没有+符号。它只是一串数字。您的解决方案仍然有效吗@Ωmega OP从不提及涉及的字母。正则表达式中的
+
符号表示“的一个或多个实例”@Ωmega-He将格式描述为一个未指定长度的数字,后跟一个15位数字-这很清楚。只涉及数字。@Lattyware-如果总共只有15位数字怎么办?为了澄清,我在urlconf中的Django中使用了正则表达式。@goelv我明白了,在这种情况下,您最好遵循它。我会注意到类似的事情在一个问题中可能值得一提。我之所以得到-1e,有什么特别的原因吗?在给定隐藏需求的情况下,它不适用于OP,但它是一个(我认为是最好的)回答所述问题。很抱歉造成混淆。我以后一定会将其包括在内。+1来自我。鉴于OP最初所述,这是一个很好的建议。你能给出一些实际的输入字符串示例,并说明你希望使用这些字符串做些什么吗?请同时说明无效输入应该做些什么。请w您希望在具体案例“01234567890123456ab”和“0123456789012345ab”中发生什么,因为这会导致一些人写很多评论,如果您能为我们澄清这一困惑,那就太好了!例如,给定4123456789123456,我想捕获第一个数字(4)和最后15个数字(1234567891123456)。另一个例子是,给定4234123456789123456,我想捕获前四位数字(4234)和后15位数字(123456789123456)。主要思想是将后15位数字与第一部分分开(未指定长度)。将不涉及字母,只涉及数字。此外,我们可以假设至少有16个或更多数字。字符串中是否有空格或其他数字,例如
123 4234123456789123456 123
?是否有无效字符串不应匹配为输入,例如
1234
?如果正好有15个数字,会发生什么字符串中的ts?不,不能有空格或任何无效字符。表达式将只包含数字而不包含其他内容。@MarkByers OP将其用于Django URL(如对我的问题的评论中所述)所以不合适的字符串应该不匹配。@goelv-
*
表示任何长度,0或更多的
*
表示“前面的
\d
的实例为零或更多”-如果至少有一位未指定数字,则使用
+
length@gnr-无需将
*
更改为
+
,即使始终至少有一个,因为
*
无论如何都会这样做…只是为了澄清一下(对不起,我是新手!),该*将重复搜索(\d)直到可以使用下一个表达式(\d{15})为止?例如,如果我有一个4位数字,后面跟着15位数字,*仍然应该只捕获前4位数字?感谢您的帮助!除非您不想匹配只有15个字符的字符串(并且开头没有随机数)。
>>> a = "3123456789123456" #3 + 15 digit number
>>> (a[:-15], a[-15:])
('3', '123456789123456')
>>> a = "32831123456789123456" #32831 + 15 digit number
>>> (a[:-15], a[-15:])
('32831', '123456789123456')
>>> a = "31123456789123456" #31 + 15 digit number
>>> (a[:-15], a[-15:])
('31', '123456789123456')