如何在Python中用regex匹配一个数字的n次方(教程)

280 阅读2分钟

How to match a digit n times with regex in Python

这里有几种在Python中用regex匹配一个数字n次的方法。

第一步:精确匹配n次的数字

假设你想找到一个准确长度为n的数字序列。如果是这样,你可以使用regex格式\D(\d{4})\D - 来匹配一个字符串中的4个数字。

例子。

import re
text = 'abcd123efg123456_1234ghij'
re.findall(r"\D(\d{4})\D", text)

将找到。

['1234']

它是如何工作的?

  • \d{4} - 准确匹配4位数字
  • \D - 匹配非数字字符

所以它将匹配一个非数字字符。然后将搜索4个数字,后面是一个非数字字符。如果是这样,将只提取4位数。

第2步:匹配n次或更多的数字

如果你想提取n次或更多的数字序列呢?我们可以使用这样的语法:\d{3,} - 这将提取连续3个或更多的数字。

import re
text = 'abcd523efg123456_1234ghij'
re.findall(r"(\d{3,})", text)

这将导致。

['523', '123456', '1234']

如果你想提取整个单词或被空格包围的数字呢?那么你可以使用\b ,它是用于边界的,如。

import re
text = 'abcd523efg 123456 _ 1234 ghij'
re.findall(r"\b(\d{3,})\b", text)

输出。

['123456', '1234']

第三步:匹配n次或m次的数字

要找到长度为3或6的数字序列,你可以尝试使用r"\d{3}|\d{6}"

重要提示:匹配n次和m次数字的顺序很重要。为了证明这一点,我们来看看下面的例子。

import re
text = 'abcd523efg 123456 _ 1234 ghij'
re.findall(r"\d{3}|\d{6}", text)

结果。

['523', '123', '456', '123']

while:

import re
text = 'abcd523efg 123456 _ 1234 ghij'
re.findall(r"\d{6}|\d{3}", text)

结果。

['523', '123456', '123']

所以,如果你想得到较长的序列,那么你需要把频率较高的放在前面。

第4步:从某一数字开始,匹配n次数字

最后,让我们检查一下,你想找到n个以某种模式开始的数字的情况。这可以通过下一个例子来实现--我们将精确提取3个数字,前面是一个字母。

import re
text = 'abcd523efg123456_1234ghij'
re.findall(r"[a-z](\d{3})", text)

结果。

['523', '123']

还有一个例子是关于3个字母前面的非字母字符。

import re
text = 'abcd523efg123456_1234ghij'
re.findall(r"[^a-z](\d{3})", text)

结果。

['234', '123']