首页 > 解决方案 > 在python中使用正则表达式查找特定的数字模式

问题描述

我正在尝试使用 Python 3.7 中的正则表达式提取特定的数字模式。以下是 4 种可能的模式。

模式 1 - 此模式的长度正好是 10,不能从零开始。这些仅由整数组成。例如:'1234567890'

模式 2 - 此模式的长度正好是 11,并且可以从零开始。这些仅由整数组成。例如:'01234567890'

模式 3 - 此模式的长度正好是 11,不能从零开始。第 5 个数字后面有一个空格,其他字符都是数字。例如:'12345 67890'

模式 4 - 此模式的长度正好是 12,并且可以从零开始。第 6 个数字后面有一个空格,其他字符都是数字。例如:'012345 67890'

注意 - 提供的示例模式示例仅用于表示。我的字符串中的实际数字集可以是任何东西。示例:“2345653340”或“034945 85730”或“000000 00000”或“09876543210”。

以下是我一直在尝试的。出于某种原因,他们没有返回预期的结果。我该怎么做?

import re

regex = re.compile(r"(\d)?\d\d\d\d\d(\b)?\d\d\d\d\d")

number1 = regex.findall("number is 1234567890") # For Pattern 1 expected output is '1234567890'
number2 = regex.findall("number is 01234567890") # For Pattern 2 expected output is '01234567890'
number3 = regex.findall("number is 12345 67890") # For Pattern 3 expected output is '12345 67890'
number4 = regex.findall("number is 012345 67890") # For Pattern 4 expected output is '012345 67890'

标签: pythonregexpython-3.x

解决方案


正则表达式101(链接):

import re

l = ["number is 1234567890",
"number is 01234567890",
"number is 12345 67890",
"number is 012345 67890",

"number is 912345 67890 - dont match",
"number is 02345 67890 - dont match",
"number is 91234567890 - dont match",
"number is 0234567890 - dont match"]

for s in l:
    m = re.findall(r'\b0\d{5}\s\d{5}\b|\b[1-9]\d{4}\s\d{5}\b|\b0\d{10}\b|\b[1-9]\d{9}\b', s)
    print(m)

印刷:

['1234567890']
['01234567890']
['12345 67890']
['012345 67890']
[]
[]
[]
[]

推荐阅读