16.Python正则表达:表示字符、表示数量、原始字符串、表示边界、匹配分组

Python 正则表达式是用于字符串匹配的强大工具,支持模式匹配、查找、替换等操作。正则表达式通过特定的语法来表示字符串中的模式,帮助我们高效地处理文本。

1. 表示字符

正则表达式中的字符可以表示不同的字符类。常见的字符类有:

  • .:匹配除换行符以外的任意字符。
  • \d:匹配数字(0-9)。
  • \D:匹配非数字字符。
  • \w:匹配字母、数字或下划线(等价于 [a-zA-Z0-9_])。
  • \W:匹配非字母、数字或下划线。
  • \s:匹配任意空白字符(空格、制表符、换行符等)。
  • \S:匹配非空白字符。
示例:匹配数字
import re

pattern = r'\d+'  # 匹配一个或多个数字
text = 'I have 123 apples.'
result = re.findall(pattern, text)
print(result)  # 输出 ['123']

2. 表示数量

在正则表达式中,可以通过量词来控制匹配的数量:

  • *:匹配前面的字符零次或多次(包括零次)。
  • +:匹配前面的字符一次或多次。
  • ?:匹配前面的字符零次或一次。
  • {n}:匹配前面的字符恰好 n 次。
  • {n,}:匹配前面的字符至少 n 次。
  • {n,m}:匹配前面的字符至少 n 次,至多 m 次。
示例:匹配一个或多个字母
pattern = r'[a-zA-Z]+'  # 匹配一个或多个字母
text = 'Hello 123 world'
result = re.findall(pattern, text)
print(result)  # 输出 ['Hello', 'world']

3. 原始字符串

在正则表达式中使用反斜杠(\)时,通常需要转义。例如,\\ 用于表示单个反斜杠,而 \d 用于匹配数字。为了避免手动转义,Python 提供了原始字符串(r''),它会忽略字符串中的反斜杠转义。

示例:原始字符串的使用
pattern = r'\d+\.\d+'  # 匹配浮动小数
text = 'The price is 123.45 dollars.'
result = re.findall(pattern, text)
print(result)  # 输出 ['123.45']

使用 r'' 表示原始字符串,可以避免使用额外的反斜杠进行转义。

4. 表示边界

在正则表达式中,边界表示符用于匹配位置:

  • ^:匹配字符串的开始位置。
  • $:匹配字符串的结束位置。
  • \b:匹配单词边界(例如,空格或标点符号)。
  • \B:匹配非单词边界。
示例:匹配以数字开头的字符串
pattern = r'^\d+'  # 匹配以数字开头的字符串
text = '123abc'
result = re.match(pattern, text)
if result:
    print(result.group())  # 输出 '123'
示例:匹配单词边界
pattern = r'\bword\b'  # 匹配完整单词 'word'
text = 'wordplay and word'
result = re.findall(pattern, text)
print(result)  # 输出 ['word', 'word']

5. 匹配分组

分组可以将正则表达式的一部分括起来,这样可以对其进行单独匹配、提取或引用。

  • ():用于创建一个分组。
  • \1, \2, …:表示分组的反向引用,即引用第 1、2 等分组匹配的内容。
示例:使用分组提取匹配内容
pattern = r'(\d+)-(\d+)'  # 匹配两个数字,中间用'-'分隔
text = '2021-12'
result = re.match(pattern, text)
if result:
    print(result.group(1))  # 输出 '2021'
    print(result.group(2))  # 输出 '12'
示例:反向引用
pattern = r'(\b\w+\b)\s+\1'  # 匹配重复的单词
text = 'hello hello world'
result = re.findall(pattern, text)
print(result)  # 输出 ['hello']

总结

  • 表示字符:如 \d(数字)、\w(字母数字下划线)、\s(空白字符)等。
  • 表示数量:量词如 *(零次或多次)、+(一次或多次)、{n,m}(n至m次)等。
  • 原始字符串:使用 r'' 来表示原始字符串,避免反斜杠转义问题。
  • 表示边界:使用 ^(字符串开始)、$(字符串结束)、\b(单词边界)等来定义匹配位置。
  • 匹配分组:通过括号 () 创建分组,提取匹配的子串,可以使用反向引用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DataCrafter

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值