137、字符串对象方法及正则表达式

字符串对象方法

以逗号分隔的字符串可用split拆分成数段:
1.png

split结合strip(用于修剪空白符(包括换行符))一起使用:
2.png

使用join方法把字符串与指定的字符拼接起来:
3.png

使用in、index和find检测子字符串:
4.png

find和index的区别:如果找不到字符串,find会返回-1;index将会引发一个异常。
5.png

count函数返回指定子字符串的出现次数:
6.png

replace用于将指定模式替换为另一个模式:
7.png

python内置的字符串方法:
8.png
9.png

正则表达式

正则表达式(通常称作regex)提供一种灵活的在文本中搜索或匹配字符串模式的方式。正则表达式是根据正则表达式语言编写的字符串。Python内置的re模块负责对字符串应用正则表达式。
re模块的函数分为三个大类:模式匹配、替换和拆分。

例如:拆分一个字符串,分隔符为数量不定的一组空白符(制表符、空格、换行符等)。描述一个或多个空白符的正则表达式是\s+:
21.png

调用re.split('\s+',text)时,正则表达式会先被编译,然后在text上调用split方法。可以使用re.compile编译regex得到一个可重用的regex对象:
22.png

使用findall方法返回的是字符串中所有的匹配项:
23.png

下面是一段文本及一条能够识别大部分电子邮件地址的正则表达式:
24.png

如果对多条字符串应用同一条正则表达式,可以通过re.compile创建regex对象,可以节省大量CPU时间。

使用search返回的是文本中第一个电子邮件地址:
25 .png

regex.match则返回None,因为它只匹配出现在字符串开头的模式:
26.png

使用sub方法,将匹配到的模式替换为指定字符串,并返回所得到的新字符串:
27.png

将电子邮件地址分成3个部分:用户名、域名以及域后缀,需要将待分段的模式的各个部分用圆括号包起来,并通过groups方法返回一个由模式各段组成的元组:
28.png

对于带有分组功能的模式,findall会返回一个元组列表:
29.png

sub通过\1、\2、\3的特殊符号访问各匹配项中的分组:
30.png

为各个匹配分组加上一个名称,并返回一个带有分组名称的字典:
31.png

正则表达式方法:
55.png

源码:

# coding: utf-8

# ## 字符串对象方法

# In[1]:

# 以逗号分隔的字符串可以用split拆分成数段
language = 'Python,Java, C, C++'
language.split(',')


# In[2]:

# split结合strip(用于修剪空白符(包括换行符))一起使用:
pieces = [x.strip() for x in language.split(',')]
print(pieces)


# In[3]:

# 使用join方法连接字符串
lis = ['first','second','third']
'::'.join(lis)


# ### 子字符串定位

# In[4]:

val = 'is,or,that'
'that' in val


# In[5]:

# 指出第一个出现的','在字符串中的位置
val.index(',')


# In[6]:

# find也是返回查找的第一个字符在原来字符串中的位置
val.find('or')


# ### find和index的区别

# In[7]:

val.find(':')


# In[8]:

val.index(':')


# In[9]:

# count函数返回指定字符出现的次数
val.count('t')


# In[10]:

# replace用于指定模式替换为另一个模式
val.replace(',','::')


# In[11]:

val.replace(',','')


# ## 正则表达式

# In[12]:

# 使用正则表达式拆分字符串
import re
text = 'foo  bar\t baz \tqux'
re.split('\s+',text)


# In[13]:

# 使用re.compile编译regex得到可重用的regex对象
regex = re.compile('\s+')
regex.split(text)


# In[14]:

# 使用findall方法,得到匹配regex的所有模式
regex.findall(text)


# In[15]:

# 识别电子邮件地址
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}'

# re.IGNORECASE的作用是使正则表达式对大小写不敏感
regex = re.compile(pattern,flags=re.IGNORECASE)

# 对text使用findall将得到一组电子邮件地址
regex.findall(text)


# In[16]:

# search返回的是文本中第一个电子邮件地址
m = regex.search(text)
print(m)


# In[17]:

text[m.start():m.end()]


# In[18]:

# regex.match只匹配出现在字符串开头的模式
print(regex.match(text))


# In[19]:

# 使用sub方法,将匹配到的模式替换为指定字符串,并返回所得到的新字符串
print(regex.sub('REDACTED',text))


# In[20]:

# 将地址分成3个部分:用户名、域名以及域后缀
pattern = r'([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\.([A-Z]{2,4})'
regex = re.compile(pattern,flags=re.IGNORECASE) 
m = regex.match('wesm@bright.net')
# 通过groups方法返回一个元组
m.groups()


# In[21]:

# 对于带有分组功能的模式,findall会返回一个元组列表
regex.findall(text)


# In[22]:

# sub通过\1、\2、\3的特殊符号访问各匹配项中的分组
print(regex.sub(r'Username:\1,Domain:\2,Suffix:\3',text))


# In[23]:

# 为各个匹配分组加上一个名称
regex = re.compile(r'''
(?P<username>[A-Z0-9._%+-]+)
@
(?P<domain>[A-Z0-9.-]+)
\.
(?P<suffix>[A-Z]{2,4})''',flags=re.IGNORECASE|re.VERBOSE)
m = regex.match('wesm@bright.net')
# 调用groupdict()返回带有分组名称的字典
m.groupdict()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容