python基础10-正则表达式

1. 通用正则表达式

标识 含义 范围
\d 任何数字 [0-9]
\D 不是数字
\s 任何空白字符 [\t\n\r\f\v]
\S 空白字符以外
\w 任何大小写字母,数字和_ [0-9a-zA-Z_]
\W 非\w
\b 匹配任何一个单词边界 比如er\b可以匹配到never,但是不能匹配到verb
\B 匹配非单词边界 比如er\B可以匹配到verb,但是不能匹配到verb
\ 强制匹配\
. 匹配任何字符(除了\n)
? 前面的模式可有可无
* 零次或无数次
+ 1次或无数次
{n,m} 重复n-m次
{n} 重复n次
+? 非贪婪,最小方式匹配+
*? 非贪婪,最小匹配方式*
?? 非贪婪,最小匹配方式?
?= 正向前瞻 自身不占字符位,只是用来断言后面一个字符是特定字符,比如c(?=\d),这样的正则会匹配到类似于c1, c2,而不能匹配ca, cc这样的字符
?! 负向前瞻 自身不占字符位,只是用来断言后面一个字符不能是特定字符,比如(?!:).*,表示后面可以是除了\n以外的任何字符,但是不能是:
^ 匹配每一行的开头,在re.M下,每行开头都匹配
$ 匹配一行结尾,在re.M下,每行结尾都匹配
\A 匹配最开始,在re.M下,从文本最开始匹配
\B 匹配最结尾,在re.M下,从文本最结尾匹配

2. 常用函数

2.1 search

扫描查找整个字符串,找到第一个模式匹配的

import re


def re_search(str, re_relu):
 matched = re.search(re_relu, str)

 print(matched.span())
 print(matched.group())


if __name__ == '__main__':
 re_rule = r'\w+?@\w+?\.com'
 str = 'my email is abc_ff@163.com'

 re_search(str, re_rule)

2.2 match

从字符的最开头开始匹配,找到的第一个模式匹配的即实用re.M多行撇皮,也就是从最开头进行匹配

import re


def re_match(str, re_relu):
 matched = re.match(r'^m[\w+?\s+?]+@', str)

 print(matched)


if __name__ == '__main__':
 re_rule = r'\w+?@\w+?\.com'
 str = 'my email is abc_ff@163.com'

 re_match(str, re_rule)

2.3 findall

返回一个不重复的pattern的匹配列表

def re_findall(str, re_relu):
 ptn1 = re.findall(re_relu, str)

 print(ptn1)


if __name__ == '__main__':
 re_rule = r'r[au]n'
 str = 'I run to you, you ran to him!'

 re_findall(str, re_rule)

2.4 finditer

和findall类似,只不过是实用迭代器的方式

def re_findall(str, re_relu):
 ptns = re.findall(re_relu, str)

 for ptn in ptns:
 print(ptn)


if __name__ == '__main__':
 re_rule = r'r[au]n'
 str = 'I run to you, you ran to him!'

 re_findall(str, re_rule)

2.5 split

用正则表达式分开字符串

def re_split(str, re_relu):
 strs = re.split(re_relu, str)

 print(strs)

if __name__ == '__main__':
 re_rule = r'r[au]n'
 str = 'I run to you, you ran to him!'

 re_split(str, re_rule)

2.6 sub

使用正则替换字符

def re_sub(str, re_relu):
 sub_str = 'jump'
 new_str = re.sub(re_relu, sub_str, str)

 print(new_str)


if __name__ == '__main__':
 re_rule = r'r[au]n'
 str = 'I run to you, you ran to him!'

 re_sub(str, re_rule)

'''
output: 
'I jump to you, you jump to him!'
'''

2.7 subn

和sub类似,但是额外返回一个替换的次数

re_subn(str, re_relu):
 sub_str = 'jump'
 new_str = re.subn(re_relu, sub_str, str)

 print(new_str)


if __name__ == '__main__':
 re_rule = r'r[au]n'
 str = 'I run to you, you ran to him!'

 re_subn(str, re_rule)

'''
output: 
('I jump to you, you jump to him!', 2)
'''

3 参考

知乎:python正则表达式详解:从基础匹配到高级应用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容