获取每个间隙中的前三位数字

时间:2014-12-24 10:17:10

标签: python regex

刚开始学习正则表达式。我这里有问题。

到目前为止,这是我的代码。

match = re.findall(r'\d{1,3}', string)

我知道我会得到每个第三个号码。但我不知道如何只告诉每个差距。

我有一个看起来像这样的字符串:

string = "24812949 2472198 4271748 12472187"

我想要一个这样的结果:

["248", "247", "427", "124"]

5 个答案:

答案 0 :(得分:2)

使用字边界\b\b匹配单词字符和非单词字符。

match = re.findall(r'\b\d{1,3}', string)

OR

负面的背后断言。 (?<!\S)断言匹配不会以非空格字符开头。

match = re.findall(r'(?<!\S)\d{1,3}', string)

答案 1 :(得分:1)

您可以将\b添加为字边界:

>>> re.findall(r'\b\d{1,3}', string)
['248', '247', '427', '124']

但如果您的字符串始终采用此形式,则可以不使用正则表达式:

>>> [i[:3] for i in string.split()]
['248', '247', '427', '124']

答案 2 :(得分:1)

我很惊讶没有人考虑消耗其余数字而不是担心边界:

>>> re.findall(r'(\d{1,3})\d*', string)
['248', '247', '427', '124']

通过捕获前3位数字(或者在数字较小的情况下更少)并匹配其余数字,下一场比赛无法在数字中间发生。当前一个匹配结束时,它之后的下一个字符(如果有)必须是非数字的,并且由于引擎从左向右扫描,下一个匹配将从一串数字的开头开始。

当正则表达式中至少有一个捕获组时,

re.findall函数也只返回捕获组中的内容,从而平滑整个过程。

答案 3 :(得分:0)

(?:^|(?<=\s))\d{1,3}

试试这个。看看演示。

https://regex101.com/r/gQ3kS4/22

match = re.findall(r'(?:^|(?<=\s))\d{1,3}', string)

答案 4 :(得分:0)

尝试以下解决方案: -

string="24812949 2472198 4271748 12472187"
match = re.findall(r'\b\d{1,3}', string)
print match

输出: - ['248','247','427','124']