在平时的工作中,经常需处理字符串型数据:
在Excel里很容易操作,可以使用文本函数或者Power Query:
如果在Python里,该如何处理呢?
01字符串构造方法
1.三种方法构造字符串:
单引号、双引号、三引号
2.使用符号构建字符串规则:如果字符串的内容
注:三引号是适用情况最多的字符串构造方法,而且三引号允许长字符串的换行,这是其他两种引号无法实现的,如变量string4所示。
# 单引号构造字符串string1 = '"欢迎关注Excel知识管理微信公众号,我是数据可视化爱好者李强"'# 双引号构造字符串string2 = "'这是我的第五篇Python读书笔记,希望能帮到大家更好地入门Python'"# 三引号构造字符串string3 = ''''Tips':"如果你觉得从零开始学Python系列很好, 请分享给你的朋友们"'''string4 = '''欢迎关注Excel知识管理微信公众号,我是数据可视化爱好者李强。如果你觉得从零开始学Python系列很好,请分享给你的朋友们。'''print(string1)print(string2)print(string3)print(string4)out:"欢迎关注Excel知识管理微信公众号,我是数据可视化爱好者李强"'这是我的第五篇Python读书笔记,希望能帮到大家更好地入门Python''Tips':"如果你觉得从零开始学Python系列很好, 请分享给你的朋友们"欢迎关注Excel知识管理微信公众号,我是数据可视化爱好者李强。如果你觉得从零开始学Python系列很好,请分享给你的朋友们。
02字符串常用方法汇总及示例
字符串常用方法示例
# 获取身份证号码中的出生日期print('123456198901017890'[6:14])# 将手机号中的中间四位替换为四颗星tel = '13612345678'print(tel.replace(tel[3:7],'****'))# 将邮箱按@符分隔开print('12345@qq.com'.split('@'))# 将Python的每个字母用减号连接print('-'.join('Python'))# 删除" 今天星期日 "的首尾空白print(" 今天星期日 ".strip())# 删除" 今天星期日 "的左边空白print(" 今天星期日 ".lstrip())# 删除" 今天星期日 "的右边空白print(" 今天星期日 ".rstrip())# 计算子串“中国”在字符串中的个数string5 = '中国方案引领世界前行,展现了中国应势而为、勇于担当的大国引领作用!'print(string5.count('中国'))# 查询"Python"单词所在的位置string6 = '我是一名Python用户,Python给我的工作带来了很多便捷。'print(string6.index('Python'))print(string6.find('Python'))# 字符串是否以“2018年”开头string7 = '2017年匆匆走过,迎来崭新的2018年'print(string7.startswith('2018年'))# 字符串是否以“2018年”年结尾print(string7.endswith('2018年'))out:19890101136****5678['12345', 'qq.com']P-y-t-h-o-n今天星期日今天星期日 今天星期日244FalseTrue
注:
本节记录正则表达式完成字符串查询匹配、替换匹配和分割匹配。
有时,光靠字符串的上述“方法”无法实现字符串的其他处理功能,例如:
此时需要用到字符串的正则表达式:从字符串中发现规律, 并通过“抽象”的符号表达出来。
常用的正则符号表
正则表达式完成字符串的查询、替换和分割操作都需要导入re模块,并使用如下几个函数。
1.匹配查询函数
findall(pattern,string,flags=0)
findall 函数可以对指定的字符串进行遍历匹配,获取字符串中所有匹配的子串,并返回一个列表结果。参数含义:
2.匹配替换函数
sub(pattern,repl,string,count=0,flags=0)
sub 函数的功能是替换, 类似于字符串的 replace 方法,该函数根据正则表达式把满足匹配的内容替换为repl。 参数含义:
3.匹配分割函数
split(pattern,string,maxsplit=0,flags=0)
split 函数是将字符串按照指定的正则表达式分隔开,类似于字符串的 split方法。 参数含义:
4.通过案例加强理解三个函数:
# 导入第三方包import re# 取出出字符中所有的天气状态string8 = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'轻度污染'},{ymd:'2018-01-02',tianqi:'阴~小雨',aqiInfo:'优'},{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'优'},{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'优'}"print(re.findall("tianqi:'(.*?)'", string8))print(re.findall("tianqi:'.*?'", string8))
# 取出所有含O字母的单词string9 = 'Together, we discovered that a free market only thrives when there are rules to ensure competition and fair play, Our celebration of initiative and enterprise'print(re.findall('\w*o\w*',string9, flags = re.I))print(re.findall('(\w*o\w*)',string9, flags = re.I))
# 将标点符号、数字和字母删除string10 = '据悉,这次发运的4台蒸汽冷凝罐属于国际热核聚变实验堆(ITER)项目的核二级压力设备,先后完成了压力试验、真空试验、氦气检漏试验、千斤顶试验、吊耳载荷试验、叠装试验等验收试验。'print(re.sub('[,。、a-zA-Z0-9()]','',string10))
# 将每一部分的内容分割开string11 = '2室2厅 | 101.62平 | 低区/7层 | 朝南 \n 上海未来 - 浦东 - 金杨 - 2005年建'split = re.split('[-\|\n]', string11)print(split)split_strip = [i.strip() for i in split]print(split_strip)out:['晴', '阴~小雨', '小雨~中雨', '中雨~小雨']["tianqi:'晴'", "tianqi:'阴~小雨'", "tianqi:'小雨~中雨'", "tianqi:'中雨~小雨'"]['Together', 'discovered', 'only', 'to', 'competition', 'Our', 'celebration', 'of']['Together', 'discovered', 'only', 'to', 'competition', 'Our', 'celebration', 'of']据悉这次发运的台蒸汽冷凝罐属于国际热核聚变实验堆项目的核二级压力设备先后完成了压力试验真空试验氦气检漏试验千斤顶试验吊耳载荷试验叠装试验等验收试验['2室2厅 ', ' 101.62平 ', ' 低区/7层 ', ' 朝南 ', ' 上海未来 ', ' 浦东 ', ' 金杨 ', ' 2005年建']['2室2厅', '101.62平', '低区/7层', '朝南', '上海未来', '浦东', '金杨', '2005年建']
注:如上结果所示: