re.I 的作用是忽略字符大小写
text = "I'm Jasmine-Feng. My student number is No. 321432"pattern = r"Jasmine-FENG"print('Default: ', re.findall(pattern,text))print('Ignore upper/lower case: ', re.findall(pattern,text,flags=re.I))
N.B. pattern被赋了一个 r字符串 ,这个r字符串的作用是避免转义,r是raw的缩写,也就是保持原样的意思。可看这篇博文。一般来说,使用正则表达式都会用到这个r字符串。
Default: []Ignore upper/lower case: ['Jasmine-Feng']Process finished with exit code 0
在默认情况下,区分大小写,找不到ENG;若不区分,则可以找到eng。
2.2、 re.ASCII ( re.A )
re.A 的作用是只匹配ASCII码支持的字符,那么具体指哪些字符呢?下图来自百度百科。
汉字是不在这个里面的,所以如果修饰符是 re.A 的话就匹配不了汉字了哈~
text = "我是Jasmine-Feng. 我的学号是No. 321432"pattern = r"\w+"print('Default: ', re.findall(pattern,text))print('ASCII: ', re.findall(pattern,text,flags=re.A))
\w+ 的作用是匹配一个或多个字母数字下划线汉字
Default: ['我是Jasmine', 'Feng', '我的学号是No', '321432']ASCII: ['Jasmine', 'Feng', 'No', '321432']Process finished with exit code 0
2.3、 re.DOTALL ( re.S )
在正则表达式模式中, . 是用来
text = "我\t是Jasmine-F\neng. 我%的?学号是No. 321432"pattern = r'.*'print('Default: ', re.findall(pattern,text))print('DOTALL: ', re.findall(pattern,text,re.S))
.* 的作用是匹配长度至少为0的字符(串),emmm,好像是句废话?事实上,只要整段话不被换行符截断,就可以得到整个字符串(外加一个空字符串)。
Default: ['我\t是Jasmine-F', '', 'eng. 我%的?学号是No. 321432', '']DOTALL: ['我\t是Jasmine-F\neng. 我%的?学号是No. 321432', '']Process finished with exit code 0
2.4、 re.MULTILINE ( re.M )
$ 匹配定位到字符串末尾, ^ 定位到字符串开头,默认情况下,如果换行,是不能定位到新一行的行头/尾的,而用 re.M 修饰则可以,也就是多行模式。
text = "我\t是Jasmine-F\neng. 我%的?\n学号是No. 321432"pattern = r'.$'pattern2 = r'^.'print('Default, end: ', re.findall(pattern, text))print('MULTILINE, end: ', re.findall(pattern, text, re.M))print('Default, start: ', re.findall(pattern2, text))print('MULTILINE, start: ', re.findall(pattern2, text, re.M))
Default, end: ['2']MULTILINE, end: ['F', '?', '2']Default, start: ['我']MULTILINE, start: ['我', 'e', '学']Process finished with exit code 0
2.5、 re.VERBOSE (re.X)
verbose是“详实的、冗长的”意思,通过该修饰符可以在 正则表达式 中加入注释。注意,是往 pattern 里面加,不是往 text 加!我一开始以为是可以往 text 加注释,然后调试半天都得不到结果。。。
text = '朋友们好啊!我是xxxxxx拳掌门人xxx~'pattern = r'''朋友们 # 主语 好啊! # 谓语 '''print(re.findall(pattern, text,re.VERBOSE))
['朋友们好啊!']Process finished with exit code 0
2.6、修饰符的叠加
使用 | 可以叠加修饰。
text = 'Hello everybody!\n我是xxxxxx拳掌门人xxx~'pattern = r'BODY.*$'print(re.findall(pattern, text, re.I))print(re.findall(pattern, text, re.M))print(re.findall(pattern, text, re.M | re.I))
[][]['body!']Process finished with exit code 0
3、正则表达式函数
3.1、查找单个匹配项的函数
函数 功能 search 从任意位置开始搜索 match 从开头搜索,不用完全匹配 fullmatch 从开头搜索,必须完全匹配其实我本来是写了自己的例子的,但是浏览器给我误关了,又没保存(心态直接炸裂
以上就是笔记之 Python正则表达式的详细内容!