【发布时间】:2019-08-01 18:33:01
【问题描述】:
我正在尝试使用 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'
【问题讨论】:
-
了解你得到什么输出以及你期望什么会很有用。你会让其他人更容易帮助你。
-
试试这个-
0?\d{10}|0?\d{5}\s\d{5}。它将匹配所有 4 种模式。 -
您的正则表达式不正确,因为它接受 01234 56789(模式 3)。对于不接受 0 的模式,您不能使用 \d。你必须使用 [123456789] !
-
@GulJamalZim 基本上有很多模式可以匹配这些数字,关键是要了解你想要匹配什么。
-
@GiovaLomba,我刚刚更新了我的问题以获得所需的输出。
标签: python regex python-3.x