正则表达式在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 = []
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中的简单使用(附带例子:正则表达式匹配+数据清洗)_第1张图片
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?’。请注意在逗号和两个数之间不能有空格。

你可能感兴趣的:(python,正则表达式)