python-正则表达快速掌握

1.内置库 re

正则表达式(Regular Expression,简称Regex或RegExp)是一种用于描述字符串模式的强大工具。它可以用来匹配、搜索、替换字符串,具有灵活性和强大的表达能力。在Python中,我们可以使用re模块来使用正则表达式。

2.使用场景

(1)正则表达式是记录文本规则的代码

(2)正则表达式用于操作某些复杂的字符串、日志

(3)原生字符串需要在原生字符串上加上r' string'

3.基本的正则表达式元字符和它们的含义

  1. .:匹配任意字符(除了换行符 \n)。
  2. ^:匹配字符串的开头。
  3. $:匹配字符串的结尾。
  4. *:匹配前面的字符零次或多次。
  5. +:匹配前面的字符一次或多次。
  6. ?:匹配前面的字符零次或一次。
  7. []:定义一个字符集,匹配其中的任意一个字符。
  8. ():标记一个子表达式,用于分组操作

4.举例及详细说明

import re

# 示例 1: 匹配邮箱地址
email_pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'

#这个email_pattern是一个正则表达式,用于匹配邮箱地址的模式,

"""

  1. ^:匹配字符串的开头。
  2. [a-zA-Z0-9_.+-]+:匹配一个或多个大小写字母、数字、下划线、点、加号或减号。
  3. @:匹配邮箱地址中的@符号。
  4. [a-zA-Z0-9-]+:匹配一个或多个大小写字母、数字或减号。
  5. \.:匹配点号(因为点号在正则表达式中有特殊含义,所以需要使用反斜杠转义)。
  6. [a-zA-Z0-9-.]+:匹配一个或多个大小写字母、数字、减号或点号。
  7. $:匹配字符串的结尾。

综合起来,这个正则表达式的模式可以匹配形如user@example.com的邮箱地址。下面是一些匹配和不匹配的示例:

  • 匹配: user@example.com, john.doe123@example.co.uk
  • 不匹配: user@.com, user@com, user@.123

"""

email = 'user@example.com'
if re.match(email_pattern, email):
    print(f'{email} 是一个有效的邮箱地址')
else:
    print(f'{email} 不是一个有效的邮箱地址')

# 示例 2: 查找字符串中的数字
text = 'Hello 123 World 456'
numbers = re.findall(r'\d+', text)

print('字符串中的数字:', numbers)

"""

re.findall(r'\d+', text) 是使用正则表达式在文本中查找所有连续的数字的匹配项。下面是对这个表达式的解释:

  • re.findall: findallre 模块提供的一个函数,用于在文本中查找所有匹配的子字符串,并以列表形式返回。

  • r'\d+': 这是一个正则表达式,具体含义如下:

    • \d: 匹配任意数字(0-9)。
    • +: 匹配前面的字符(\d)一次或多次

综合起来,re.findall(r'\d+', text) 的作用是在字符串 text 中找到所有连续的数字,并以列表的形式返回这些数字。

在上面的那个例子中,将会输出['123', '456']

"""

# 示例 3: 替换字符串中的空格为下划线
sentence = 'This is a sample sentence.'
modified_sentence = re.sub(r'\s', '_', sentence)
print('替换后的句子:', modified_sentence)

"""

re.sub(r'\s', '_', sentence) 是使用正则表达式替换字符串中所有空格为下划线的操作。下面是对这个表达式的解释:

  • re.sub: subre 模块提供的一个函数,用于在字符串中查找匹配的子字符串并进行替换。

  • r'\s': 这是一个正则表达式,具体含义如下:

    • \s: 匹配任意空白字符,包括空格、制表符、换行符等。
  • '_': 这是替换匹配到的空白字符的字符串,即将空格替换为下划线

综上所述,上面的例子将会输出 This_is_a_sample_sentence.

"""

# 示例 4: 提取文本中的日期
text_with_dates = 'Today is 2024-01-03, and tomorrow is 2024-01-04.'
dates = re.findall(r'\d{4}-\d{2}-\d{2}', text_with_dates)
print('提取的日期:', dates)


"""

re.findall(r'\d{4}-\d{2}-\d{2}', text_with_dates) 是使用正则表达式在文本中查找所有符合特定日期格式的匹配项。下面是对这个表达式的解释:

  • re.findall: findallre 模块提供的一个函数,用于在字符串中查找所有匹配的子字符串,并以列表形式返回。

  • r'\d{4}-\d{2}-\d{2}': 这是一个正则表达式,具体含义如下:

    • \d{4}: 匹配包含四个数字的子字符串。
    • -: 匹配短横线。
    • \d{2}: 匹配包含两个数字的子字符串。
    • -: 匹配短横线。
    • \d{2}: 匹配包含两个数字的子字符串

综合起来,re.findall(r'\d{4}-\d{2}-\d{2}', text_with_dates) 的作用是在字符串 text_with_dates 中找到所有符合"YYYY-MM-DD"日期格式的子字符串,并以列表的形式返回这些日期字符串

所以上面的例子将会输出:['2024-01-03', '2024-01-04']

"""

5.总结

快速理解一个 Python 正则表达式需要注意以下几个方面:

元字符和字符类: 正则表达式中有一些特殊字符和字符类,如 .*+[] 等,它们具有特定的含义。

(1)特殊字符:

  1. .:匹配任意字符(除了换行符 \n)。
  2. ^:匹配字符串的开头。
  3. $:匹配字符串的结尾。
  4. *:匹配前面的字符零次或多次。
  5. +:匹配前面的字符一次或多次。
  6. ?:匹配前面的字符零次或一次。
  7. |:表示逻辑“或”,用于分隔多个模式,匹配其中任意一个。
  8. ():标记一个子表达式,用于分组操作,影响限定符的作用范围。

(2)字符类:

  1. \d:匹配任意数字(0-9)。
  2. \D:匹配任意非数字字符。
  3. \w:匹配任意字母数字字符(包括下划线)。
  4. \W:匹配任意非字母数字字符。
  5. \s:匹配任意空白字符(包括空格、制表符、换行符等)。
  6. \S:匹配任意非空白字符。

(4)字符范围:

  1. [ ]:定义一个字符类,匹配其中的任意一个字符。例如,[aeiou] 匹配任意一个元音字母。
  2. [^ ]:在字符类内使用 ^ 表示取反,匹配除了指定字符之外的任意字符。例如,[^0-9] 匹配任意非数字字符。
  1. 重复和限定符: 正则表达式中的 *+?{} 等符号用于表示模式中字符的重复或出现次数的限定。了解它们如何影响匹配是很重要的。

  2. 分组: 使用小括号 () 可以创建子表达式,这对于对模式进行分组和应用限定符、操作符等非常有用。

  3. 转义字符: 有些字符在正则表达式中有特殊含义,如果要匹配这些字符本身,需要使用反斜杠 \ 进行转义。例如,. 在正则表达式中匹配任意字符,但 \. 匹配实际的点号。

  4. 字符类: 使用方括号 [] 可以定义一个字符类,它匹配方括号中列举的任何一个字符。例如,[a-z] 表示匹配任何小写字母。

  5. 锚点: ^$ 分别表示字符串的开头和结尾。它们用于确保模式匹配整个字符串而不是部分字符串。

  6. 预定义字符类:\d 表示匹配任何数字字符,\w 表示匹配任何字母数字字符(包括下划线),\s 表示匹配任何空白字符等。

  7. 选择和分支: 使用 | 表示选择,可以匹配两个或多个模式之一。

  8. 修饰符: 正则表达式还可以包含修饰符,例如 re.IGNORECASE,用于忽略大小写。

  9. 注释: 在正则表达式中使用 # 可以添加注释,提高可读性。

阅读正则表达式时,可以将其拆分成小块,逐个理解每个部分的含义。可以使用在线的正则表达式测试工具,将正则表达式和待匹配的文本输入,查看匹配结果,帮助理解正则表达式的行为。

最终,通过实际的例子和测试,逐步熟悉和理解正则表达式的使用。

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值