python|正则表达式在python中的简单使用(附带例子(正则表达式匹配+数据清洗))

来讲一下正则表达式在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中的简单使用(附带例子(正则表达式匹配+数据清洗))】运行一下
python|正则表达式在python中的简单使用(附带例子(正则表达式匹配+数据清洗))
文章图片

OK!现在来讲解一下代码中的正则表达式:
result = re.findall(’($[\d+,]\d+[.\d+])|(\d+.\d{2}美元)’,text)
(\$[\d+,]*\d+[\.\d+]*)|(\d+\.\d{2}美元)

  1. \$:匹配一个“$”美元符号,\在这里是转义符;
  2. [\d+,]:这可以看做是一个单独的语句
    (1)
    [… …]:中括号,通俗地讲就是看做是一个整体表达式,做一个优先级运算;
    (2)
    \d*:匹配一个数字;
    (3)+:加号,匹配前面的子表达式一次或多次。\d+ 匹配一个或多个数字的组合;
    (4),:逗号,在这里没什么含义,仅仅是为了匹配一个逗号;
  3. *:星号和 加号 作用类似,是为了匹配前面的子表达式零次或多次,例如 \d* ,就可以匹配空字符串或者多个数字的组合;
  4. [.\d+]*:同理,这里补充一下,. 在这里也仅仅是为了匹配一个小数点;
  5. (… …):括号,和中括号功能类似,也是看做是一个整体表达式,但是有一点不同的是,它的子表达式会获取供以后使用,就是说有多少个括号就会匹配多少个结果,例如 (… (…)…(…)…) ,这里有三个括号,那它最后返回的结果集就是 [ [a,b,c], [a,b,c], [a,b,c]… …] 这种形式的,还不懂的话可以将上面的中括号换成小括号再运行一下程序就懂了;
  6. |:竖杠,表示或的意思,例如:\d|\s 会匹配一个字符或者是一个数字;
  7. {… …}:大括号,有两种用法,一种是和小括号和中括号一样,另一种就是在上面表达式中的功能
字符 描述
{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?’。请注意在逗号和两个数之间不能有空格。

    推荐阅读