python - 正则表达式提取所有具有不同长度和特殊字符的数字
问题描述
text1=""" my acc no is 1234 5678.I pay 123$ as an interest @ 14.9% starting from 12/07/19.My debit number is 123-45666-789-112"""
我希望输出具有所有数字,例如1234 5678
, 123$
, 14.9%
, 12/07/19
,123-45666-789-112
我试图运行的代码给出了部分结果。请帮帮我
import re
reg="\d{1,}[^a-zA-Z]?\d{1,}?[^a-zA-Z]?\d?"
gc=re.compile(reg)
number = gc.findall(text1)
print(number)
['1234 567', '123$', '14.9%', '12/07', '19.', '123-456', '66-789', '112']
另外,如果我想要数字前的两个单词,我该如何提取?即acc no是1234 5678等。
解决方案
要获得完整结果,您可以使用以下正则表达式:
(?:\d+[ $%./-]?)+
它捕获可能由单个连续数字分隔符分隔的数字序列。这将捕获日期、带有单个空格的数字作为百位数分隔符和货币/百分比符号,但将避免匹配1. 2
并sentence 1. 2nd sentence
留下使用多个空格分隔数字的可能性。
要包括前两个词,您可以使用这个:
[^\d ]+ [^\d ]+ (?:\d+[ $%./-]?)+
它只捕获两个由空格分隔的非数字字符序列,然后继续执行前一个正则表达式。
(注意,在帐号的情况下,它只会捕获“no is”)
推荐阅读
- python - Telegram bot ConversationHandler 忽略回退
- asp.net-mvc - 在 asp.net mvc 中创建一个清理输入的属性以防止应用程序级别的 xss 攻击
- cmake - CMake 生成器表达式和 CONFIG 变量查询
- symfony - Chrome 上 Symfony 5 的 CORS 问题
- android - 如何修复错误“皮棉分析期间发生意外失败。StackOverflowError”
- sql - 如何查询审计表以添加开始结束日期
- php - 如何在 PHP 的函数中本地使用全局数组中的值?
- java - 在java中的多线程中限制对象的创建
- python-3.x - 如何使用 google-compute-engine python 客户端过滤 Google Cloud 实例?
- sql - 如何在插入但不使用插入值时使用触发器进行更新