我从一个字符串中提取跟随者数字,例如下面的字符串。第一种模式似乎不适用于单个数字。是因为第一个模式检查数字后面是否有字符,而第一行在4
和Followers
之间没有其他字符?第二种模式运作得很好。
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))
答案 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']
请参阅regex和Python 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-------------|