pandas—字符串正则表达式

1 取字符串、切片

创建字符串,使用一对单引号或双引号

字符串索引从0开始, 负数索引从最后一个-1开始。空格占一位。

取单个字母,使用方括号 a = 'hello word'    print(a[0])  

取最后一个字符,用负数索引  print(a[-1])  

len(a) 得到字符串长度

切片 ( : )  左包含右排除原则  print(a[ :4])   |  print(a[1: ])  

增量切片  print(a[ 1:len(a):3])  从索引1到尾 每间隔2字符取一个

2 字符串方法

2.1 join()方法

把字符连接起来

a = ['h','e','l','l','o']
a1 = ' '.join(a)           #使用空格把字符连接起来
print(a1)

b1 = '23'
b2 = '12'
b3 = '17'
b = '我'.join([b1,b2,b3])    #指定用‘我’连接
print(b)

'''
h e l l o
23我12我17
'''

2.2 splitlins()方法 

分割跨行的字符串,返回列表

#split指定分隔符 分割字符串,列表返回
a = 'abcdabcdabcd'
a.split('d')
print(a.split('d'))

#splitlins 分割跨行的字符串
some = '''wang: hi,bob
bob: hi,wang 
wang: how are you?
bob: good,are you?
wang: fine,thanks
bob: yes 
'''
print(some)
#分割后,得到一个列表
some_split = some.splitlines()
print(some_split)
#优化:可以在列表使用切片 提取‘wang’的对话,再使用replace将‘wang:’替换成空格

'''
['abc', 'abc', 'abc', '']

wang: hi,bob
bob: hi,wang 
wang: how are you?
bob: good,are you?
wang: fine,thanks
bob: yes 

['wang: hi,bob', 'bob: hi,wang ', 'wang: how are you?', 'bob: good,are you?', 'wang: fine,thanks', 'bob: yes ']
'''

3 字符串格式化

#f''  可读性更好,执行速度高,性能好
name = 'wang'
print(f'hi my name is {name}')

3.1 格式化字符串

format() 

name = 'wang'
s = 'hi, {}, how are you'      #带有特殊占位符的字符串
print(s.format(name))

s2 = 'hi, {},how are you ,do you know {}'     #多个占位符,默认顺序
print(s2.format('wang','sun'))

s2 = 'hi, {1},how are you ,do you know {1}'   #指定顺序
print(s2.format('wang','sun'))

s2 = 'hi, {n1},how are you ,do you know {n2}' #给占位符一个变量
print(s2.format(n1='wang',n2='sun'))
'''
hi, wang, how are you
hi, wang,how are you ,do you know sun
hi, sun,how are you ,do you know sun
hi, wang,how are you ,do you know sun
'''

3.2 格式化数字

name = '18'
s = 'hi, are you {}'      #带有特殊占位符的数字
print(s.format(name))

#大数  {:,} 千位分隔符
print('hi,wang,you have {:,} money ,wawawa'.format(42947247))

#小数  {0:.4}  {0:.4%}  0表示索引,4保留几位小数,%转化为百分数
print('i remember have {0:.4} or {0:.4%} ai'.format(1/1700))

#读取时是数字,使用时是字符串。使用字符串格式用0填充。
#{0:04d}  0索引,0填充的字符,4总共多少字符,d表示使用数字
print('number is {0:04d}'.format(65))
'''
hi, are you 18
hi,wang,you have 42,947,247 money ,wawawa
i remember have 0.0005882 or 0.0588% ai
number is 0065
'''

3.3 C printf格式化风格

#C语言格式 %格式化字符串
print('this num is %d' %7)
print('some message is %(A)s : %(B).2f' %{'A':'e','B':3.1314})

'''
this num is 7
some message is e : 3.13
'''

4 正则表达式

常见字符:. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字\W 匹配任意不是字母,数字,下划线,汉字的字符
\s 匹配任意的空白符\S 匹配任意不是空白符的字符
\d 匹配数字\D 匹配任意非数字的字符
\b 匹配单词的开始或结束\B 匹配不是单词开头或结束的位置
* 匹配前面的子表达式零次或多次{n} n 是一个非负整数。匹配确定的 n 次
+ 匹配前面的子表达式一次或多次{n,} n 是非负整数。至少匹配n 次
? 匹配前面的子表达式零次或一次{n,m} 非负整数,其中n<= m。最少匹配n次且最多匹配m次

4.1 匹配模式 

search 在字符串中进行搜索(有就行)

match 从字符串开头进行匹配(开头就的有)

#正则表达式模块
import re

phone_num = 'my phone is 15689898921'
m = re.search(pattern='\d\d\d\d\d\d\d\d\d\d\d',string=phone_num)   #模式可以简写为\d{10}
#方法二, 得到结果相同
# phone_num = re.compile(r'\d\d\d\d\d\d\d\d\d\d\d')
# m = phone_num.search('my phone is 15689898921')
print(m)

'''
#span给出匹配字符串的索引,match给出精确匹配到的字符串
<re.Match object; span=(12, 23), match='15689898921'>
'''
print(m.start())          #获取第一个匹配字符串的索引
print(m.end())            #获取最后一个
print(m.span())           #获取第一个和最后一个
print(m.group())          #获取与指定模式相匹配的字符串
'''
12
23
(12, 23)
15689898921
'''
#当电话号码的形式变了,其pattern形式也要改变
phone_num = '156 89898921 is my phone'
m = re.match(pattern='\d{3}\s?\d{4}\s?\d{4}',string=phone_num)
print(m)
'''
<re.Match object; span=(0, 12), match='156 89898921'>
'''

4.2 查找模式 findall

#findall 查找模式中的所有匹配项
s = '15 feh rj 334 jlw jl,hjk hkl ghj 32 21,jj32'
p = '\d+'
m = re.findall(pattern=p,string=s)
print(m)

'''
['15', '334', '32', '21', '32']
'''

4.3 模式替代 sub

s = '''wang: hi,bob
bob: hi,wang 
wang: how are you?
bob: good,are you?
wang: fine,thanks
bob: yes 
'''
p = '\w+\s?\w+:\s?'
m = re.sub(pattern=p,string=s,repl=' ')   #repl提供的字符串替换匹配
print(m)

'''
 hi, hi,wang 
 how are you?
 good,are you?
 fine, yes 
'''

4.4 编译模式 compile

#把模式字符串传递到compile函数中并保存结果
#方法二
#match
p = re.compile('\d{11}')
s = 'my phone is 15689898921'
m = p.search(s)
print(m)

#sub
s1 = '''wang: how are you?
bob: good,are you?
'''
p1 = re.compile( '\w+\s?\w+:\s?')
m1 = re.sub(pattern=p1,string=s1,repl=' ')   #repl提供的字符串替换匹配
print(m1)

'''
<re.Match object; span=(12, 23), match='15689898921'>
 how are you?
 good,are you?
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值