python - Python REGEX 如何从变量中提取特定数字
问题描述
我有以下问题:
var a = ' 15159970 (30.12.2015), 15615115 (01.01.1970), 11224455, 55441123
我想要一个正则表达式来仅提取数字:15159970、15615115、11224455、55441123
到目前为止有什么:
re.findall(r'(\d+\s)\(', a)
仅提取前 2 个数字:15159970、15615115
还有第二个 var b = 15159970, 15615115, 11224455, 55441126 我想比较这两个变量,如果它们不同,则打印(“变量不同!”)
谢谢!
解决方案
您可以提取所有前面没有数字或数字+点且后面没有点+数字或数字的数字块:
(?<!\d)(?<!\d\.)\d+(?!\.?\d)
查看正则表达式演示
细节
(?<!\d)
- 一个否定的后向查找,导致紧跟在数字前面的位置失败(?<!\d\.)
- 一个否定的后向查找,导致紧接在数字和点之前的位置失败\d+
- 1+ 位数(?!\.?\d)
- 一个否定的前瞻,它使一个位置失败,紧跟一个数字或一个点 + 一个数字。
import re
a = ' 15159970 (30.12.2015), 15615115 (01.01.1970), 11224455, 55441123 '
print( re.findall(r'(?<!\d)(?<!\d\.)\d+(?!\.?\d)', a) )
# => ['15159970', '15615115', '11224455', '55441123']
另一种解决方案:仅提取括号之外的数字块。
请参阅此 Python 演示:
import re
text = "15159970 (30.12.2015), 15615115 (01.01.1970), 11224455, 55441123 (28.11.2014 12:43:14)"
print( list(filter(None, re.findall(r'\([^()]+\)|(\d+)', text))) )
# => ['15159970', '15615115', '11224455', '55441123']
在这里,\([^()]+\)|(\d+)
比赛
\([^()]+\)
- ,除and和 then(
之外的任何 1+ 字符(
)
)
|
- 或者(\d+)
- 匹配并捕获到第 1 组一个或多个数字(re.findall
如果模式中有捕获组,则仅包括捕获的子字符串)。
当出现非括号匹配时,结果中会出现空项目,因此,我们需要删除它们(使用list(filter(None, results))
或使用[x for x in results if x]
)。
推荐阅读
- javascript - vue-socket.io Uncaught TypeError:无法读取未定义的属性
- jmeter - org.apache.http.conn.HttpHostConnectException 与 jMeter
- css - 在 flex-direction 中控制 flex 子项的高度:行场景
- java - 货号格式异常
- angular - 我可以使用 SVG
- python - 如何在python中捕获文本并同时替换它?
- mfc - ARGB 未在默认 MFC 项目中定义
- c# - 如何使用 Linq 加入 2 个 Key 匹配和 SUM 的字符串列表
- wordpress - page.php 正在加载 wordpress 帖子而不是 single.php
- angular - Azure AD B2C:客户在兑换机密授权时必须发送 client_secret