来讲一下正则表达式在python中的简单使用,直接上例子吧~~ 题目:使用python正则表达式匹配文中所有的美元字样,并且将其转换成纯金额。
dollar.txt:
asdasfa$12342.492asgasg$231,999.00h$299124rher$345213
asdasfa$12342.492asgasg$231,999.00h$299124rher$979699
$231,999.00h$299124rherh5240.00美元$231,999.00$2893529
asdasfa$12342.492asgasg$231,999.00h$299124rher$039572
asdasfa$12342.492asgasg$231,999.00h$231,999.00#$02935
$231,999.00h$299124rherh5240.00美元$231,999.00$29037we
asdasfa$12342.492asgasg$231,999.00h$231,999.00$352396j
$231,999.00h$299124rherh5240.00美元$231,999.00$wr$2351
asdasfa$12342.492asgasg$231,999.00h$231,999.00$2352366
通过浏览可以发现,dollar.txt中的金额样式有
$12342.492
$231,999.00(带逗号的)
5240.00美元
$345213
import re# 获取所有数据
text = ''
file = open(r"dollar.txt",encoding="UTF-8")
for line in file:
text = text + line
file.close()# 通过正则表达式获取结果集
result = re.findall('(\$[\d+,]*\d+[\.\d+]*)|(\d+\.\d{2}美元)',text)# 数据清洗
data = https://www.it610.com/article/[]
for r in result:
if r[0] !='':
data.append(r[0])
if r[1] != '':
data.append(r[1])# 打印输出
print("{}{}".format("提取的数据:",data))list_num = []# 存储纯数字列表
for n in data:
list_num.append(re.findall('\d+',n))# 将字符串除去print(list_num)result_num = []# 存储最终结果
for i in list_num:
money = 0
digit = 0# 用来表示位数,从个位开始
if len(i) == 1:
money = eval(i[0])
else:
decimal = eval(i[-1])/pow(10,len(i))# 小数部分
money = decimal
li = list(reversed(i))# 倒序排序
for j in range(1,len(li)):
money = money + eval(li[j])*pow(10,digit)
digit = digit + len(li[j])
result_num.append(money)# 打印输出
print(result_num)
【python|正则表达式在python中的简单使用(附带例子(正则表达式匹配+数据清洗))】运行一下
文章图片
OK!现在来讲解一下代码中的正则表达式:
result = re.findall(’($[\d+,]\d+[.\d+])|(\d+.\d{2}美元)’,text)
(\$[\d+,]*\d+[\.\d+]*)|(\d+\.\d{2}美元)
-
\$
:匹配一个“$”美元符号,\在这里是转义符;
- [\d+,]:这可以看做是一个单独的语句
(1)[… …]:中括号,通俗地讲就是看做是一个整体表达式,做一个优先级运算;
(2)\d*:匹配一个数字;
(3)+:加号,匹配前面的子表达式一次或多次。\d+ 匹配一个或多个数字的组合;
(4),:逗号,在这里没什么含义,仅仅是为了匹配一个逗号;
-
*
:星号和 加号 作用类似,是为了匹配前面的子表达式零次或多次,例如 \d* ,就可以匹配空字符串或者多个数字的组合;
- [.\d+]*:同理,这里补充一下,. 在这里也仅仅是为了匹配一个小数点;
- (… …):括号,和中括号功能类似,也是看做是一个整体表达式,但是有一点不同的是,它的子表达式会获取供以后使用,就是说有多少个括号就会匹配多少个结果,例如 (… (…)…(…)…) ,这里有三个括号,那它最后返回的结果集就是 [ [a,b,c], [a,b,c], [a,b,c]… …] 这种形式的,还不懂的话可以将上面的中括号换成小括号再运行一下程序就懂了;
-
|
:竖杠,表示或的意思,例如:\d|\s 会匹配一个字符或者是一个数字;
- {… …}:大括号,有两种用法,一种是和小括号和中括号一样,另一种就是在上面表达式中的功能
字符 | 描述 |
---|---|
{n} | n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。 |
{n,} | n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。 |
推荐阅读
- python|一文看懂正则表达式?:和?=的区别
- 杂谈|接口基础(正则表达式)
- 字符串|深入正则表达式(3):正则表达式工作引擎流程分析与原理释义
- scala|Scala:正则表达式详解
- python|正则表达式
- 正则表达式|c#正则表达式——匹配不同类型的一个字符
- 正则表达式|一看就懂(正则表达式)
- 第059讲(论一只爬虫的自我修养7:正则表达式3)
- python|python wordcloud安装_利用python制作词云,wordcloud神器你值得拥有