python - 提取特定单词后的所有数字(整数和浮点数)
问题描述
假设我有以下字符串:
str = """
HELLO 1 Stop #$**& 5.02‼️ 16.1
regex
5 ,#2.3222
"""
我想导出所有数字,无论是 int 还是 float 在“stop”一词之后,不区分大小写。所以预期的结果将是:
[5.02, 16.1, 5, 2.3222]
到目前为止,我最远的是使用此处其他帖子中的 PyPi 正则表达式:
regex.compile(r'(?<=stop.*)\d+(?:\.\d+)?', regex.I)
但是这个表达式只给了我 [5.02, 16.1]
解决方案
还有一个,尽管使用了较新的regex
模块:
(?:\G(?!\A)|Stop)\D+\K\d+(?:\.\d+)?
在 regex101.com 上查看演示。
中Python
,这可能是
import regex as re
string = """
HELLO 1 Stop #$**& 5.02‼️ 16.1
regex
5 ,#2.3222
"""
pattern = re.compile(r'(?:\G(?!\A)|Stop)\D+\K\d+(?:\.\d+)?')
numbers = pattern.findall(string)
print(numbers)
并且会产生
['5.02', '16.1', '5', '2.3222']
不要以内置函数命名变量,例如str
、list
等dict
。
如果您需要更进一步并将搜索限制在某些范围内(例如 和 之间的所有数字Stop
)end
,您也可以使用
(?:\G(?!\A)|Stop)(?:(?!end)\D)+\K\d+(?:\.\d+)?
# ^^^ ^^^
在 regex101.com 上查看另一个演示。
推荐阅读
- java - 在 JPA 中选择返回空值
- python - 使用 python regexp 匹配 ASN.1 字符串
- sql - posgresql中时间戳分组日期的有序重复 - sql
- modem - Telit UL865 3G 调制解调器在 AT#HTTPRCV=0 后挂起(需要重置)
- sql - 总计值,直到我到达某个点
- nix - 组合多个 `python.withPackages` 定义
- r - 域名更改后闪亮的应用程序不起作用
- reporting-services - 更改 Microsoft Report Builder 中的字体外观
- c - 如何释放()非堆对象?
- python - 推送被拒绝到heroku