如何在Python中正则表达式字符串中长度为7但数字不以0开头的数字?

我有一个像这样的字符串:


s = "Abc 3456789 cbd 0045678 def 12345663333"

print(re.findall(r"(?<!\d)\d{7}(?!\d)", s))


Ouput is : 3456789  and 0045678

但我只想得到 3456789。我该怎么做呢?


莫回无
浏览 148回答 3
3回答

千巷猫影

根据查找不以0you 开头的 7 位数字的标题,可以使用:(?<!\d)[1-9]\d{6}(?!\d)请在比赛开始时注意[1-9],然后再匹配接下来的 6 位数字,使其总数达到 7 位数字。正则表达式演示要使其匹配任何不以0use 开头的数字:(?<!\d)[1-9]\d*(?!\d)

PIPIONE

这将做到这一点:^\D+(\d+)\s在字符串的开头^,有任何非数字字符\D+,后跟任意数量的数字\d+,这些数字将被捕获(\d+),并且后面需要跟一个空格\s。请参阅: https:&nbsp;//regex101.com/r/ZuGJ7l/1

千万里不及你

如果您要查找不以 0 开头的数字,请使用[1-9]第一个数字和\d其余数字。例如,要查找长度为 7 的(根据标题),这将为您提供:re.findall(r'(?<!\d)[1-9]\d{6}(?!\d)',&nbsp;s)换句话说,一个非零数字后跟 6 位数字,整个数字之前或之后都没有数字(根据负向前看和负向后看断言),对于您当前的示例字符串将产生:['3456789']如果你想要长度不是7 的,你可以使用:re.findall(r'(?<!\d)[1-9](?:\d{,5}|\d{7,})(?!\d)',&nbsp;s)换句话说,一个非零数字后跟 <= 5 或 >= 7 位数字(即除 6 之外的任何数字),整个数字前面或后面都没有数字,这将给出:['12345663333']请注意,在第二种情况下,使用 来?:确保括号内的组是非捕获组——这确保re.findall将返回匹配的所有内容,而不是括号的内容。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python