龙空技术网

Python 正则表达式(三)

烟火少年时 119

前言:

此刻各位老铁们对“python正则多行匹配”可能比较看重,大家都想要知道一些“python正则多行匹配”的相关知识。那么小编同时在网摘上汇集了一些对于“python正则多行匹配””的相关知识,希望咱们能喜欢,看官们一起来学习一下吧!

前言

前面两节已经介绍了Python正则表达式的语法,接下来我们来看看 re 模块中各种函数的应用

常用函数1、Search介绍

re.search(pattern, string, flags=0)

pattern: 正则匹配规则string: 目标字符串flags: 匹配模式

扫描整个 字符串 找到匹配样式的第一个位置,并返回一个相应的 匹配对象。

如果没有匹配到,就返回 None ;注意这和找到一个零长度匹配是不同的。

示例

ans = re.search('abc', 'abcdd')if ans:    print('Search result: ', ans.group())else:    print('No match')# out: Search result:  abc
2、Match介绍

re.match(pattern, string, flags=0)

参数含义同上

如果 string 开始的0或者多个字符匹配到了正则表达式,就返回一个相应的 匹配对象 。

如果没有匹配到,就返回 None ;注意它跟零长度匹配是不同的。

注意:即使在多行模式下, re.match()也只匹配字符串的开始位置,而不是匹配每行开始。

如果想在 string 的任何位置搜索,可以使用 search() 来替代

示例

ans = re.match('abc', 'abcdd')if ans:    print('match result: ', ans.group())else:    print('No match')# out: Match result:  abcans = re.match('abc', 'babcdd')if ans:    print('match result: ', ans.group())else:    print('No match')# out: No match
3、fullmatch介绍

re.fullmatch(pattern, string, flags=0)

整个 string 都要匹配到正则表达式

匹配到就返回一个相应的 匹配对象 。否则就返回一个 None

示例

ans = re.fullmatch('abc.dd', 'abcddd')if ans:    print('Match result: ', ans.group())else:    print('No match')# out: Match result:  abcddd
4、split介绍

re.split(pattern, string, maxsplit=0, flags=0)

用 pattern 去分割 string 。

如果在 pattern 中捕获到括号,那么所有的组里的文字也会包含在列表里。

maxsplit 设定最多分隔次数, 剩下的字符全部返回到列表的最后一个元素。

示例

# 用非文本字符(字母数字下划线)分割re.split(r'\W+', 'Words, words, words.')# out: ['Words', 'words', 'words', '']# 分割字符串也会保留在结果列表中re.split(r'(\W+)', 'Words, words, words.')# out: ['Words', ', ', 'words', ', ', 'words', '.', '']# 切割一次re.split(r'\W+', 'Words, words, words.', 1)# out: ['Words', 'words, words.']# 以[a-f]之间的字符分割,且不区分大小写re.split('(?i)[a-f]+', '0a3aB9')re.split('[a-f]+', '0a3aB9', flags=re.IGNORECASE)# out: ['0', '3', '9']
5、findall介绍

re.findall(pattern, string, flags=0)

从左到右进行扫描,匹配按找到的顺序返回。

如果样式里存在一个或多个组,就返回一个组合列表

空匹配也会包含在结果里。

前面两节都是使用 findall ,这里便不再举例啦。

6、finditer介绍

re.finditer(pattern, string, flags=0)

与 findall 差不多,不一样的地方是:返回一个包含 匹配对象 的迭代器

示例

for ans in re.finditer(r'\w+', 'Words, words, words.'):    print(ans.group(), end='\t')# out: Words words words
7、sub介绍

re.sub(pattern, repl, string, count=0, flags=0)

使用 repl 替换 string 中匹配的子串,并返回替换后的字符串。

如果样式没有找到,则原样返回 string。

repl 可以是字符串或函数

字符串:任何反斜杠转义序列都会被处理,如 \n 会被转换为一个换行符,其他未知转义序列例如 \& 会保持原样。向后引用像是 \2 会用样式中第 2 组所匹配到的子字符串来替换。函数:那它会对每个非重复的 pattern 进行调用。这个函数只有一个 匹配对象 参数,并返回一个替换后的字符串。

可选参数 count 是要替换的最大次数,非负,默认全部匹配

示例

re.sub('\w+', '123', 'hello, world, hello python')# out: '123, 123, 123 123're.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',       r'static PyObject*\npy_\1(void)\n{',       'def myfunc():')# out: 'static PyObject*\npy_myfunc(void)\n{'"""pattern:匹配 Python 函数定义repl: 其中 \1 引用了捕获的函数名 myfunc,其他原样输出"""def dashrepl(matchobj):    if matchobj.group(0) == '-':         return ' '    else:         return '-'        re.sub('-{1,2}', dashrepl, 'pro----gram-files')# out: 'pro--gram files'
8、subn介绍

re.subn(pattern, repl, string, count=0, flags=0)

与 sub() 相同,但是返回一个元组 (字符串, 替换次数).

示例

re.subn('\w+', '123', 'hello, world, hello python')# out: ('123, 123, 123 123', 4)
总结

好了好了,一下子讲了这么多函数,还没消化呢吧

今天就先讲到这里吧。

咱们明天见。

标签: #python正则多行匹配 #python 正则匹配多行