Python中的正则表达式是一种强大的文本处理工具,它允许你使用特殊的字符和元字符来定义搜索模式。以下是一些基本概念和示例,帮助你理解如何在Python中使用正则表达式:
基本概念
-
模式(Pattern) :用特定语法描述的字符串模式。
-
元字符(Metacharacters) :具有特殊含义的字符,如
.
(匹配任意字符)、*
(匹配前一个字符0次或多次)等。 -
字符类(Character Classes) :用方括号
[]
定义的字符集合,如[a-z]
匹配任何小写字母。 -
量词(Quantifiers) :指定前面的模式应该匹配多少次,如
*
、+
、?
、{n,m}
等。 -
分组(Groups) :用括号
()
将模式的一部分组合在一起,可以捕获匹配的子字符串。
Python正则表达式使用
在Python中,使用正则表达式需要导入re
模块。下面是一些基本的使用方法:
导入模块
import re
匹配文本中的数字
text = "我有12个苹果和3个香蕉"
pattern = r'\d'
numbers = re.findall(pattern, text)
print(numbers) # 输出: ['12', '3']
匹配邮箱地址
email = "example@example.com"
email_pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
if re.match(email_pattern, email):
print("Email address is valid.")
else:
print("Email address is invalid.")
匹配手机号
text = "我的电话是13812345678"
pattern = r"1\d{10}"
result = re.search(pattern, text)
if result:
print(f"找到的手机号为:{result.group()}")
替换文本中的数字为星号
text = "我的密码是123456"
masked = re.sub(r'\d', '******', text)
print(masked) # 输出: 我的密码是******
分割文本
text = "python,java;javascript,go"
languages = re.split(r'[,;]', text)
print(languages) # 输出: ['python', 'java', 'javascript', 'go']
贪婪与非贪婪匹配
text = "Kimi is 25 years old and her phone number is 13812345678"
pattern = r'(\d{3})\d{3}-\d{4}'
match = re.search(pattern, text)
if match:
print(f"Found a phone number: {match.group()}")
常用正则表达式模式
-
\d
:匹配任意数字。 -
\w
:匹配字母、数字、下划线。 -
\s
:匹配空白字符(空格、制表符、换行符)。 -
.*
:匹配除换行符外的任意字符。 -
^
:匹配输入字符串的开始位置。 -
$
:匹配输入字符串的结束位置。 -
*
:匹配前面的子表达式零次或多次。 -
+
:匹配前面的子表达式一次或多次。 -
?
:匹配前面的子表达式零次或一次。 -
{n}
:匹配确定的n次。 -
{n,}
:至少匹配n次。 -
{n,m}
:最少匹配n次且最多m次。
实战案例
-
邮箱地址验证 :使用正则表达式验证邮箱格式。
-
IP地址验证 :使用正则表达式验证IP地址格式。
注意
- 在正则表达式模式前加
r
表示原始字符串,可以避免转义字符造成的困扰。
希望这些示例和解释能帮助你理解Python中正则表达式的使用。