python:正则相关:在限定模式上使用 split()分隔字符串

本文深入探讨了Python中re模块的高级应用,包括使用正则表达式进行复杂字符串分割,利用扩展符号增强匹配能力,以及如何在正则表达式中直接指定标记如IGNORECASE、MULTILINE等,以实现更灵活的文本处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

re 模块和正则表达式的对象方法 split(),基于正则表达式的模式分隔字符串

如果你不想为每次模式的出现都分割字符串,就可以通过为 max 参数设定
一个值(非零)来指定最大分割数。

如果给定分隔符不是使用特殊符号来匹配多重模式的正则表达式,那么 re.split()与str.split()的工作方式相同,如下所示(基于单引号分割)。
>>> re.split(':', 'str1:str2:str3')
['str1', 'str2', 'str3']

这是一个简单的示例。如果有一个更复杂的示例,例如,一个用于 Web 站点(类似于
Google 或者 Yahoo! Maps)的简单解析器,该如何实现?用户需要输入城市和州名,或者城
市名加上 ZIP 编码, 还是三者同时输入?这就需要比仅仅是普通字符串分割更强大的处理方
式,具体如下。
>>> import re
>>> DATA = (
... 'Mountain View, CA 94040',
... 'Sunnyvale, CA',
... 'Los Altos, 94023',
... 'Cupertino 95014',
... 'Palo Alto CA',
... )
>>> for datum in DATA:
... print re.split(', |(?= (?:\d{5}|[A-Z]{2})) ', datum)
...
['Mountain View', 'CA', '94040']
['Sunnyvale', 'CA']
['Los Altos', '94023']
['Cupertino', '95014']
['Palo Alto', 'CA']

上述正则表达式拥有一个简单的组件:使用 split 语句基于逗号分割字符串,或者根据后面的正则表达式。含义:在普通的英文中,通常这样说:如果空格紧跟在五个数字( ZIP 编码)或者两个大写字母(美国联邦州缩写)之后,就用 split 语句分割该空格。这就允许我们在城市名中放置空格。

扩展符号:上面用到了扩展符号

通过使用 (?iLmsux) 系列选项,用户可以直接在正则表达式里面指定一个或者多个标记,而不是通过 compile()或者其他 re 模块函数。

使用 re.I/IGNORECASE 的示例

>>> re.findall(r'(?i)yes', 'yes? Yes. YES!!')
['yes', 'Yes', 'YES']
>>> re.findall(r'(?i)th\w+', 'The quickest way is through this
tunnel.')
['The', 'through', 'this']

一个示例在 re.M/MULTILINE 实现多行混合

>>> re.findall(r'(?im)(^th[\w ]+)', """
... This line is the first,
... another line,
... that line, it's the best
... """)
['This line is the first', 'that line']

演示使用 re.S/DOTALL。该标记表明点号( .) 能够用来表示\n 符号(反之其通常用于表示除了\n 之外的全部字符):
>>> re.findall(r'th.+', '''
... The first line

... the second line
... the third line
... ''')
['the second line', 'the third line']
>>> re.findall(r'(?s)th.+', '''
... The first line
... the second line
... the third line
... ''')
['the second line\nthe third line\n']

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值