Python正则表达式是一种强大的工具,用于对文本进行匹配和替换。它可以快速、精确地查找、替换和提取文本,是文本处理的重要工具之一。
一、正则表达式基础
正则表达式是一种描述字符模式的语言,它可以用来匹配、查找和替换文本中的字符串。在Python中,使用re模块来支持正则表达式操作。
以下是一些基本的正则表达式元字符:
. 匹配任意单个字符 ^ 匹配行首 $ 匹配行尾 * 匹配前一个字符0次或多次 + 匹配前一个字符1次或多次 ? 匹配前一个字符0次或1次 [] 匹配方括号中的任意一个字符 | 匹配“|”左侧或右侧的字符 () 分组,可在后续操作中引用 \ 转义字符,用于匹配元字符本身
例如,使用正则表达式匹配一个邮箱地址:
import re email = 'example@gmail.com' pattern = r'\w+@\w+\.\w+' if re.match(pattern, email): print('匹配成功!') else: print('匹配失败!')
二、正则表达式模式修饰符
在正则表达式中,使用模式修饰符可以改变正则表达式的匹配行为。常用的模式修饰符包括:
- i :忽略大小写匹配
- m :多行匹配,改变^和$的行为
- s :点(.)匹配所有字符,包括换行符
- u :使用Unicode匹配模式
- x :允许注释和空白
例如,使用模式修饰符匹配多行文本:
import re text = '''This is example for multiline matching''' pattern = r'^\w+' match = re.findall(pattern, text, re.MULTILINE) print(match)
三、正则表达式高级应用
1. 非贪婪匹配
在正则表达式中,默认为贪婪匹配,即尽可能多地匹配字符。如果想要使用非贪婪匹配,可以在元字符后面加上“?”。
例如,使用非贪婪匹配匹配HTML标签:
import re html = '<div><a href="http://www.example.com">example</a></div>' pattern = r'<.+?>' print(re.findall(pattern, html))
2. 回溯引用
在正则表达式中,使用小括号进行分组,还可以使用“\数字”来引用分组,例如“\1”代表第一个分组的内容。回溯引用可以用来匹配重复出现的子串。
例如,使用回溯引用匹配连续相同的单词:
import re text = 'Python Python Python Java Java Python' pattern = r'\b(\w+)\s+\1\b' print(re.findall(pattern, text))
3. 断言
在正则表达式中,使用断言可以匹配符合某个条件的字符串,但不包括在匹配结果中。断言分为正向断言和反向断言,分别使用“?=”和“?!”表示。
例如,使用断言匹配含有“example”但不是以“http://”开头的字符串:
import re text = 'example.com http://example.com' pattern = r'(?四、应用场景
正则表达式在文本处理、数据清洗、爬虫等场景中都非常常用。例如,爬虫可以使用正则表达式来提取网页中的数据;文本处理可以使用正则表达式来过滤、替换文本中的指定内容。
以下是一个使用正则表达式过滤电话号码的例子:
import re text = '联系我电话:010-88888888,移动电话:13888888888,传真:010-99999999' pattern = r'1[3456789]\d{9}|\d{3}-\d{8}' print(re.findall(pattern, text))总结
Python正则表达式是一种强大而灵活的文本处理工具。熟练掌握正则表达式,可以大大提高文本处理的效率和准确性。无论是数据清洗、爬虫还是其他文本处理场景,都可以用正则表达式来解决问题。