我有一个像这样的字符串:s = "Abc 3456789 cbd 0045678 def 12345663333"print(re.findall(r"(?<!\d)\d{7}(?!\d)", s))Ouput is : 3456789 and 0045678但我只想得到 3456789。我该怎么做呢?
3 回答
PIPIONE
TA贡献1829条经验 获得超9个赞
这将做到这一点:^\D+(\d+)\s
在字符串的开头^
,有任何非数字字符\D+
,后跟任意数量的数字\d+
,这些数字将被捕获(\d+)
,并且后面需要跟一个空格\s
。
请参阅: https: //regex101.com/r/ZuGJ7l/1
千万里不及你
TA贡献1784条经验 获得超9个赞
如果您要查找不以 0 开头的数字,请使用[1-9]
第一个数字和\d
其余数字。
例如,要查找长度为 7 的(根据标题),这将为您提供:
re.findall(r'(?<!\d)[1-9]\d{6}(?!\d)', s)
换句话说,一个非零数字后跟 6 位数字,整个数字之前或之后都没有数字(根据负向前看和负向后看断言),
对于您当前的示例字符串将产生:
['3456789']
如果你想要长度不是7 的,你可以使用:
re.findall(r'(?<!\d)[1-9](?:\d{,5}|\d{7,})(?!\d)', s)
换句话说,一个非零数字后跟 <= 5 或 >= 7 位数字(即除 6 之外的任何数字),整个数字前面或后面都没有数字,
这将给出:
['12345663333']
请注意,在第二种情况下,使用 来?:
确保括号内的组是非捕获组——这确保re.findall
将返回匹配的所有内容,而不是括号的内容。
添加回答
举报
0/150
提交
取消