1. Python正则表达式入门
正则表达式(regular expression)是一种专门用来匹配字符的文本模式,可以用于字符串的匹配、搜索和替换。在Python中也可以使用正则表达式模块(re模块)进行字符串的处理。
Python中的正则表达式有很多种,其中最基本的是由元字符、普通字符和特殊字符组成的表达式。例如,可以使用元字符“.”来匹配任意字符,使用特殊字符“\d”来匹配数字。
1.1 元字符
元字符是正则表达式中最基本的符号,它们用来匹配字符串中的一些特殊字符,例如点号(.)、星号(*)、加号(+)、问号(?)等。下面是一些常用的元字符列表:
. 匹配除换行符之外的任何字符。
^ 匹配字符串的起始位置。
$ 匹配字符串的结束位置。
* 匹配前一个字符0次或多次。
+ 匹配前一个字符1次或多次。
? 匹配前一个字符0次或1次。
| 匹配左右任何一个表达式。
[] 匹配一组字符中的任意一个字符。
{m,n} 匹配前一个字符m到n次。
1.2 字符类
字符类可以用来匹配指定范围内的字符,例如数字、字母、空格等。在正则表达式中,可以使用“\w”匹配数字和字母字符,“\d”匹配数字字符,“\s”匹配空白字符等。
例如,下面的正则表达式可以匹配由数字和小写字母组成的字符串:
import re
text = 'abc123'
pattern = r'[a-z0-9]'
result = re.findall(pattern, text)
print(result) # ['a', 'b', 'c', '1', '2', '3']
1.3 特殊字符
特殊字符在正则表达式中也有很大的用处,例如可以使用“\b”匹配单词的边界,“\A”匹配字符串的开头,“\Z”匹配字符串的结尾等。
例如,下面的正则表达式可以匹配以http开头的字符串:
import re
text = 'http://www.baidu.com'
pattern = r'\Ahttp'
result = re.findall(pattern, text)
print(result) # ['http']
2. Python正则表达式关键词匹配
关键词匹配指的是在一个字符串中匹配指定的关键词或者从一段文本中提取相应的信息。在Python中,可以使用正则表达式来实现关键词匹配。
2.1 简单的关键词匹配
简单的关键词匹配是指只需要匹配一个关键词或者固定的字符串。在这种情况下,可以使用re模块中的match()函数来实现。
下面是一个简单的例子,其中的正则表达式用来匹配一个固定的字符串:
import re
text = 'hello, world!'
pattern = r'hello'
result = re.match(pattern, text)
if result:
print('Match found:', result.group(0))
else:
print('Match not found')
在上面的代码中,使用了match()函数和一个简单的正则表达式来匹配字符串中的一个关键词“hello”,如果匹配成功,则输出“Match found”以及匹配结果;否则输出“Match not found”。
2.2 复杂的关键词匹配
复杂的关键词匹配一般指匹配包含多个关键词或者一些规则的字符串。在这种情况下,可以使用re模块中的search()函数来实现。
下面是一个复杂的例子,其中的正则表达式用来匹配包含“Python”和“programming”的字符串:
import re
text = 'I like Python programming.'
pattern = r'Python.*programming'
result = re.search(pattern, text)
if result:
print('Match found:', result.group(0))
else:
print('Match not found')
在上面的代码中,使用了search()函数和一个正则表达式来匹配一个包含“Python”和“programming”的字符串。其中的“.*”表示匹配0个或多个任意字符。
2.3 正则表达式分组
正则表达式分组可以让我们更加灵活地匹配字符串,例如可以使用括号来表示一个分组,然后再根据需要来提取相应的信息。在Python中,可以使用group()函数来实现分组匹配。
下面是一个分组匹配的例子,其中的正则表达式用来匹配一个包含日期和时间的字符串,然后从中提取出相应的信息:
import re
text = '2019-10-01 10:20:30'
pattern = r'(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})'
result = re.search(pattern, text)
if result:
print('Match found:', result.group())
print('Year:', result.group(1))
print('Month:', result.group(2))
print('Day:', result.group(3))
print('Hour:', result.group(4))
print('Minute:', result.group(5))
print('Second:', result.group(6))
else:
print('Match not found')
在上面的代码中,使用了括号来表示6个分组,然后再根据需要来提取相应的信息。其中的“\d”表示数字字符,“{4}”则表示需要匹配4个数字字符。
3. Python正则表达式应用场景
Python正则表达式可以用于很多方面,例如文本的搜索、替换、提取和校验等。下面是一些常见的应用场景:
3.1 字符串搜索
字符串搜索是指在一个字符串中搜索指定的内容。在Python中,可以使用re模块中的search()函数或者findall()函数来实现字符串搜索。
下面是一个字符串搜索的例子,其中的正则表达式用来匹配包含“Python”关键词的字符串:
import re
text = 'Python is an interpreted, high-level, general-purpose programming language.'
pattern = r'Python'
result = re.search(pattern, text)
if result:
print('Match found:', result.group())
else:
print('Match not found')
result = re.findall(pattern, text)
print('Number of matches:', len(result))
在上面的代码中,使用了search()函数和findall()函数来搜索包含“Python”关键词的字符串,如果搜索成功,则输出匹配结果;否则输出“Match not found”。
3.2 字符串替换
字符串替换是指将一个字符串中的指定内容替换为另一个内容。在Python中,可以使用re模块中的sub()函数来实现字符串替换。
下面是一个字符串替换的例子,其中的正则表达式用来将字符串中的数字替换为星号:
import re
text = 'The secret code is 123456.'
pattern = r'\d'
result = re.sub(pattern, '*', text)
print(result) # The secret code is *****.
在上面的代码中,使用了sub()函数和一个正则表达式来将字符串中的数字字符替换为星号,然后将替换后的字符串输出。
3.3 字符串提取
字符串提取是指从一个字符串中提取出指定的信息。在Python中,可以使用re模块中的search()函数、findall()函数或者match()函数来实现字符串提取。
下面是一个字符串提取的例子,其中的正则表达式用来从一个包含了的姓名和年龄信息的字符串中提取出相应的信息:
import re
text = 'Tom is 18 years old, Jerry is 20 years old.'
pattern = r'(?P<name>\w+) is (?P<age>\d+) years old'
result = re.finditer(pattern, text)
for match in result:
print('Name:', match.group('name'))
print('Age:', match.group('age'))
在上面的代码中,使用了finditer()函数和一个包含命名分组的正则表达式来从字符串中提取出姓名和年龄信息。其中的“\w”表示字母、数字和下划线,“(?P<name>\w+)”表示命名为“name”的分组。
3.4 字符串校验
字符串校验是指判断一个字符串是否符合某种规则,例如是否为邮箱地址、是否为手机号码等。在Python中,可以使用re模块中的match()函数、search()函数、findall()函数或者fullmatch()函数来实现字符串校验。
下面是一个判断邮箱地址是否合法的例子,其中的正则表达式用来校验邮箱地址:
import re
email = 'test@example.com'
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
result = re.match(pattern, email)
if result:
print('Email address is valid')
else:
print('Email address is invalid')
在上面的代码中,使用了match()函数和一个正则表达式来校验一个邮箱地址是否合法。其中的“^”和“$”分别表示字符串的起始和结束位置,“+”表示匹配前一个字符1次或多次,“{2,}”表示匹配前一个字符2次或多次。
4. 总结
Python正则表达式是一个非常强大的工具,它可以用于文本的搜索、替换、提取和校验等。在使用正则表达式时,我们需要先了解一些基本的概念和语法,然后再根据实际需求来编写相应的正则表达式。
除此之外,还需要熟悉一些特殊的用法,例如正则表达式分组、命名分组等。掌握了这些技巧后,就可以更加灵活地使用正则表达式来处理文本数据。