这里有几种在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']