python - 在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'
解决方案
正则表达式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']
[]
[]
[]
[]
推荐阅读
- c - 关于 C 语言文件的 rewind() 函数的问题
- c++ - 不理解以下关于编译器可能对普通 {} 定义执行 `memcpy` 优化的评论
- java - 回调函数作为Java中的参数
- angular - 我无法通过 DTO 模式组织数据并将数据发送到 angular2 上的服务
- javascript - 如何使用电话号码登录设置 React 和 Firebase 身份验证?
- numbers - 最佳聚类数 - FUNcluster(x, i, ...) 中的错误:聚类中心多于不同的数据点
- javascript - 如何删除字符串中的 (.),然后用点显示每个字母字符
- makefile - YOLO: -bash: ./darknet: 没有这样的文件或目录
- c - 在不按 ENTER 键的情况下获取输入 - 在 C 中
- firebase - 如何使用 Flutter Firestore 将地图数据存储在数组中