还不会Python正则表达式?看这篇文章试试

开发 后端
今天写爬虫偶然想到了初学正则表达式时候,看过一篇文章非常不错。检索一下还真的找到了。

还不会Python正则表达式?看这篇文章试试

今天写爬虫偶然想到了初学正则表达式时候,看过一篇文章非常不错。检索一下还真的找到了。

re模块

 

re.search

经常用match = re.search(pat, str)的形式。因为有可能匹配不到,所以re.search()后面一般用if statement。

 

re.match

re.match和re.search很相似,只是re.match是从字符串的开头开始匹配。

 

常用正则字符意义

  • a, X, 9,等字符匹配自己, 元字符不匹配自己,因为有特殊意义,比如 . ^ $ * + ? { }[ ] \ | ( )
  • . 英文句号,匹配任意字符,不包含'\n'
  • \w 匹配'word'字符,[a-zA-Z0-9]
  • \W 匹配非'word'字符
  • \b 匹配'word'和'non-word'之间边界
  • \s 匹配单个whitespace字符,space, newline, return, tab, form [\n\r\t\f]
  • \S 匹配non-whitespace字符
  • \t, \n, \r 匹配tab, newline, return
  • \d 匹配数字[0-9]
  • ^ 匹配字符串开头
  • $ 匹配字符串结尾

重复

‘+’ 一或多次, ‘*’ 零或多次, ‘?’ 零或一次

方括号[]

 

[]类似于or

Square brackets can be used to indicate a set of chars, so [abc] matches 'a' or 'b' or 'c'.

 

Group Extraction圆括号()

有时候需要提取匹配字符的一部分,比如刚才的邮箱,我们可能需要其中的username和hostname,这时候可以用()分别把username和hostname包起来,就像r'([\w.-]+)@([\w.-]+)',如果匹配成功,那么pattern不改变,只是可以用match.group(1)和match.group(2)来username和hostname,match.group()结果不变。

 

findall and groups

()和findall()结合,如果包括一或多个group,就返回a list of tuples。

 

给re.search加^之后是一样的。

re.sub

re.sub(pat, replacement, str)在str里寻找和pattern匹配的字符串,然后用replacement替换。replacement可以包含\1或者\2来代替相应的group,然后实现局部替换。 

责任编辑:庞桂玉 来源: 马哥Linux运维
相关推荐

2021-11-10 07:47:48

Traefik边缘网关

2019-08-23 08:49:05

运维正则表达式Regex

2019-08-23 08:47:04

JavaScript运维技能

2021-07-13 12:21:34

PythonRPC通信

2024-09-14 09:18:14

Python正则表达式

2021-01-27 11:34:19

Python正则表达式字符串

2020-09-22 21:00:09

正则表达式

2010-03-25 18:25:36

Python正则表达式

2023-01-30 08:19:54

2018-09-27 15:25:08

正则表达式前端

2020-09-04 09:16:04

Python正则表达式虚拟机

2019-12-10 10:40:57

Python正则表达式编程语言

2010-03-11 08:55:45

python正则表达式

2010-03-01 15:51:59

Python则表达式

2018-08-22 11:55:02

Python网络爬虫正则表达式

2016-11-10 16:21:22

Java 正则表达式

2022-01-04 11:35:03

Linux Shel正则表达式Linux

2009-09-16 17:15:57

正则表达式引擎

2023-09-13 08:12:45

2011-06-02 12:34:16

正则表达式
点赞
收藏

51CTO技术栈公众号