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

    技术2022-07-15  61

    来讲一下正则表达式在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 = [] 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)

    运行一下 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?’。请注意在逗号和两个数之间不能有空格。
    Processed: 0.009, SQL: 9