字符串操作

字符串对象方法

Python中的split方法可以将字符串拆成多块,可传入参数表示分隔符,如不传入参数默认分隔符为空格

1
2
3
val = 'a,b, guido'
print(val.split(',')) ==>
['a', 'b', ' guido']

可以用in关键字判断是否是子字符串

1
2
3
val = 'a,b, guido'
print('guido' in val) ==>
True

其他一些函数见下表

正则表达式

单个正则表达式通常称为regex,python库中内建的re模块是用于将正则表达式应用到字符串上的库。

正则表达式主要有三个主题:模式匹配、替代、拆分

可以使用re.split(‘正则表达式’,’原串’)来进行字符串的划分

1
2
3
4
text = "foo    bar\t baz   \tqux"
#'/s+'可以匹配多种多个空白字符
print(re.split('\s+',text)) ==>
['foo', 'bar', 'baz', 'qux']

可以调用re的compile方法实现对正则表达式的复用

1
2
3
4
text = "foo    bar\t baz   \tqux"
regex = re.compile('\s+')
print(regex.split(text)) ==>
['foo', 'bar', 'baz', 'qux']

findall可以将所有匹配正则表达式的模式的列表输出

1
2
3
4
text = "foo    bar\t baz   \tqux"
regex = re.compile('\s+')
print(regex.findall(text)) ==>
[' ', '\t ', ' \t']

Tips: 在字符串前加一个r代表使用原生字符串,不受转义字符等干扰

比如说我们要识别电子邮件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
text = """Dave dave@google.com
Steve steve@gmail.com
Rob rob@gmail.com
Ryan ryan@yahoo.com
"""
pattern = r'[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'
regex = re.compile(pattern, flags=re.IGNORECASE)
#findall返回所有匹配的项目构成的列表
print(regex.findall(text)) ==>
['dave@google.com', 'steve@gmail.com', 'rob@gmail.com', 'ryan@yahoo.com']
#search返回的是文本中第一个匹配到的电子邮件地址
print(regex.search(text)) ==>
<re.Match object; span=(5, 20), match='dave@google.com'>
#match方法只在模式出现于字符串起始位置进行匹配,如果不存在输出None
print(regex.match(text)) ==>
None
#sub方法返回新的字符串,并用指定字符串替代匹配项
print(regex.sub('lakers',text)) ==>
Dave lakers
Steve lakers
Rob lakers
Ryan lakers

下表是一些有关函数的简表:

pandas中的向量化字符串函数

这里主要指的是对于DataFrames中的一些字符进行操作

下面是一些向量化方法:

Author: YihangBao
Link: https://roarboil.github.io/2019/09/24/strope/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.