吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1612|回复: 12
收起左侧

[求助] python菜鸟求教正则表达式问题

[复制链接]
Jack-yu 发表于 2020-12-25 22:18
本帖最后由 Jack-yu 于 2020-12-25 22:22 编辑

我想用正则来将图二中8千-1万这种格式的数据替换成8000.0,10000.0这个样子,但是结果并未如意,如下图所示:
图一:

2.jpg

图2:

1.jpg
求大佬指点一下怎么写正则或是我的判断语句有逻辑问题?

[Python] 纯文本查看 复制代码
def split_money(x):
    try:
        if x[1] == '万'  or x[-1] == '万':
            sal = [float(i)*10000 for i in re.findall("[0-9]+\.?[0-9]*",x)]
        elif x[1] == '千'  or x[-1] == '千':
            sal = [float(i)*1000 for i in re.findall("[0-9]+\.?[0-9]*",x)]
        else:
            pass
        return sal
    except Exception as a:
        print(a)
        return x
                    
salary = df['薪资范围'].apply(split_money)
salary

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Lucifer_BW + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Eaglecad 发表于 2020-12-25 22:34
字串替换考虑一下?
Feng_Harry 发表于 2020-12-25 22:41
Jack2002 发表于 2020-12-25 22:49
正则替换
[Python] 纯文本查看 复制代码
#coding:gbk
import re

str='''
8千-1万
4千-6千
5千-2万
'''
print("替换前:\n", str)

str = re.sub("8千", "8000", str)
str = re.sub("4千", "4000", str)
str = re.sub("5千", "5000", str)
str = re.sub("6千", "6000", str)
str = re.sub("1万", "10000", str)
str = re.sub("2万", "20000", str)

print("替换后:\n", str)

Jack2002 发表于 2020-12-25 22:59
也可使用replace替换
[Python] 纯文本查看 复制代码
#coding:gbk

str='''
8千-1万
4千-6千
5千-2万
'''
print("替换前:\n", str)

str = str.replace("8千", "8000")
str = str.replace("4千", "4000")
str = str.replace("5千", "5000")
str = str.replace("6千", "6000")
str = str.replace("1万", "10000")
str = str.replace("2万", "20000")

print("替换后:\n", str)
Jack2002 发表于 2020-12-25 23:02
本帖最后由 Jack2002 于 2020-12-25 23:05 编辑

超简单
[Python] 纯文本查看 复制代码
#coding:gbk
str='''
8千-1万
4千-6千
5千-2万
'''
print("替换前:\n", str)
str = str.replace("千", "000")
str = str.replace("万", "0000")
print("替换后:\n", str)

1.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Jack-yu + 1 + 1 我很赞同!

查看全部评分

opst4525 发表于 2020-12-25 23:27
replace替换会好点吧
tinglie 发表于 2020-12-25 23:44
正则别自己写,看着就头疼,我都是找正则网站,用现成的
rsnodame 发表于 2020-12-26 00:10
之前好像在你别的帖子回复过,不一定要用正则,最简单的split同样能有奇效,关键是要适合数据的情况
rsnodame 发表于 2020-12-26 00:53
本帖最后由 rsnodame 于 2020-12-31 08:15 编辑

不过还是想了想,怎么用正则处理

[Python] 纯文本查看 复制代码
df = pd.DataFrame(['8千-1.2万', '4.7千-6千', '1万-2万', '1千以下'],columns=['薪资范围'])

ptn = re.compile(r'\d+(\.\d+)?(千|万)')
def split_money(x):
    return [eval(i.group().replace('千','*1000').replace('万','*10000')) for i in ptn.finditer(x)]

df['薪资范围'].apply(split_money)


0    [8000, 12000.0]
1     [4700.0, 6000]
2     [10000, 20000]
3             [1000]
Name: 薪资范围, dtype: object

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Jack-yu + 1 + 1 我很赞同!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 10:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表