用于提取跟随者计数的正则表达式模式

时间:2017-09-25 22:59:31

标签: python regex

我从一个字符串中提取跟随者数字,例如下面的字符串。第一种模式似乎不适用于单个数字。是因为第一个模式检查数字后面是否有字符,而第一行在4Followers之间没有其他字符?第二种模式运作得很好。

import re

text = """
4 Followers
330 Followers
23.5k Followers
67k Followers
25m Followers
"""
print(re.compile(r'(\d.+) Followers').findall(text))
print(re.compile(r'(\d+|\d.+) Followers').findall(text))

2 个答案:

答案 0 :(得分:1)

\d.+模式匹配一​​个数字,然后匹配除换行符之外的一个或多个字符。

似乎你想要匹配一个数字,然后匹配除空格之外的任何内容,直到跟随Followers的空格。

使用

text = """
4 Followers
330 Followers
23.5k Followers
67k Followers
25m Followers
"""
print(re.findall(r'\b(\d\S*) Followers', text))
# => ['4', '330', '23.5k', '67k', '25m']

请参阅regexPython demo

<强>详情

  • \b - 字边界
  • (\d\S*) - 第1组:一个数字,然后是0 +非空白符号
  • Followers - 文字子字符串。

如果您的输入格式正确,您也可以拆分字符串:

[x.split()[0] for x in text.split('\n')]

请参阅Python demo(输出:['4', '330', '23.5k', '67k', '25m'])。

答案 1 :(得分:1)

我相信你的问题是为什么2种模式的结果不同......

不是第一个模式与单个数字不匹配,而是第一个模式 第一个模式需要一个数字后跟Followers之前的2个字符。

我没有看到任何与正则表达式相关联的忽略空格修饰符
所以正则表达式真的是

                                  (\d.+)[ ]Followers  
                                     ^   ^
          where this ----------------|   |  
          expects at least 1 char,       |
          and this ----------------------|
          expects 1 more
          ===================================
             total is minimum 2 chars between digit and Followers

第二正则表达式的工作原因是它只需要1个字符
数字和追随者之间

                      (\d+|\d.+)[ ]Followers
                        ^        ^
              digit ----|        |
              1 char-------------|