正则化&&常见异常处理

1.正则化

(1)单字符匹配

  1. .:匹配任意一个字符(除了\n

    import re
    pattern = r"a.b"
    result = re.match(pattern, "a1b")  # 匹配成功
    print(result.group())  # 输出:a1b
    
  2. \d:匹配一个数字,等价于 [0-9]

    pattern = r'\d{2}' # 由两个数字组成的子串
    text = "12 34 56"
    matches = re.findall(pattern, text)
    print(f"匹配 '\\d': {matches}")
    # 输出:['12', '34', '56']
    
  3. \D:匹配一个非数字字符,等价于 [^0-9]

  4. \w:匹配一个字母数字字符或下划线,等价于 [A-Za-z0-9_]

  5. \W:匹配一个非字母数字字符或下划线,等价于 [^A-Za-z0-9_]

  6. \s:匹配一个空白字符(包括空格、制表符、换行符)

  7. \S:匹配一个非空白字符

  8. []:匹配括号内的任意一个字符

(2)表示数量

  1. *:匹配前一个元素零次或多次
ab*c 会匹配--->一个字母 a,后跟零次或多次字母 b,然后是字母 c
  1. +:匹配前一个元素一次或多次

  2. ?:匹配前一个元素零次或一次,或使量词成为非贪婪模式

  3. {m}:匹配前一个元素出现m次

  4. {m,}:匹配前一个元素至少出现m次

  5. {m, n}:匹配前一个元素m到n次

(3)匹配边界

  1. ^:匹配输入字符串的开始位置

    import re
    pattern = r'^Hello'  # 以 "Hello" 开头的字符串
    text = "Hello world! Hello there!"
    matches = re.findall(pattern, text)
    print(f"匹配结果:{matches}") # 输出 匹配结果:['Hello']
    
  2. $:匹配输入字符串的结束位置

    import re
    pattern = r'there$'  # 以 "there" 结尾的字符串
    text = "Hello world! Hello there"
    matches = re.findall(pattern, text)
    print(f"匹配结果:{matches}") # 输出 匹配结果:['there']
    
  3. \b:匹配一个单词边界(即字母和非字母之间的位置)

    右边不能有字母和数字
    
    import re
    pattern = r'\bcat\b'
    text = "cat scat catfish"
    matches = re.findall(pattern, text)
    print(f"匹配 '\\b': {matches}")
    # 输出  匹配 '\b': ['cat']
    
    cat:这个 cat 是一个独立的单词,前后都有单词边界(即,它前面是字符串的开始,后面没有紧跟字母或数字),因此 符合匹配。
    
    scat:这个字符串包含 cat,但是它前面有一个字母 s,并不是一个单独的单词。所以,scat 不匹配。
    
    catfish:这个字符串包含 cat,但是 cat 后面紧跟着字母 f,并没有单独的单词边界。所以,catfish 中的 cat 不匹配。
    
  4. \B:匹配一个非单词边界的位置

    右边要有字母和数字
    
    import re
    print(re.match(r'.*ve\B','2testaavebcdve'))  #ve的右边需要有字母或者数字 
    print(re.match(r'.*ve\B','2testaave3bcdve'))
    

(4)匹配分组

  1. |:表示“或”,匹配左侧或右侧的表达式

    pattern = r'abc|def'
    text = "abcdef defghi"
    matches = re.findall(pattern, text)
    print(f"匹配 '|': {matches}")
    # 输出:['abc', 'def']
    
  2. ():分组,匹配括号内的内容并记住匹配的内容

    pattern = r'(ab)+'
    text = "ababab"
    matches = re.findall(pattern, text)
    print(f"匹配 '()': {matches}")
    # 输出:['ab', 'ab', 'ab']
    

(5)匹配汉字

[\u4e00-\u9fa5]:匹配任意一个汉字

import re
pattern = r'[\u4e00-\u9fa5]'
text = "Hello 你好 world"
matches = re.findall(pattern, text)
print(f"匹配汉字: {matches}")
# 匹配汉字: ['你', '好']

(6)re模块

函数 功能
re.match(pattern, string, flags=0) 从字符串开始位置进行匹配, 若起始位置匹配成功, 结果为Match对象, 否则为None
re.search(pattern, string, flags=0) 用于在整个字符串中搜索第一个匹配的值, 若匹配成功, 结果为Match, 否则为None
re.findall(pattern, string, flags=0) 用于在整个字符串中搜索所有符合正则表达式的值, 结果是一个列表类型
re.sub(pattern, repl, string, count, flags=0) 用于实现对字符串中指定子串的替换
re.split(pattern, string, maxsplit, flag=0) 分隔字符串
"""sub"""
import re
pattern = r'\d+'
# 要替换的字符串
repl = 'NUMBER'
# 要搜索的文本
text = "My phone number is 1234567890 and my zip code is 98765."
# 使用 re.sub 替换所有数字为 'NUMBER'
result = re.sub(pattern, repl, text)
print(result)

2. 异常处理

常见异常类型

异常类型 描述说明
ZeroDivisionError 除数为0时引发的异常
IndexError 索引超出范围引发的异常
KeyError 字典取值时key不存在的异常
NameError 使用一个没有声明的变量时引发的异常
SyntaxError 语法错误
ValueError 传入的值错误
AttributeError 属性或方法不存在的错误
TypeError 类型不合适引发的异常
IndentationError 不正确的缩进引发的异常

常见异常处理方式

1. try……except

try:
    可能会抛出异常的代码
except 异常类型:
	异常处理代码(报错后执行的代码)

try:
    可能会抛出异常的代码
except 异常类型A:
	异常处理代码(报错后执行的代码)
except 异常类型B:
	异常处理代码(报错后执行的代码)
try:
    x = 1 / 0  # 除以零,会抛出 ZeroDivisionError
except ZeroDivisionError:
    # 异常处理代码
    print("除以零错误!")

2. try……except……else

try:
    可能会抛出异常的代码
except 异常类型:
	异常处理代码(报错后执行的代码)
else:
	没有抛异常要执行的代码
    
try:
    可能会抛出异常的代码
except 异常类型:
	异常处理代码(报错后执行的代码)
else:
	没有抛异常要执行的代码
finally:
    无论是否产生异常都要执行的代码
try:
    # 可能会抛出异常的代码
    x = 10 / 2  # 没有异常发生
except ZeroDivisionError:
    # 异常处理代码(报错后执行的代码)
    print("不能除以零!")
else:
    # 没有抛异常要执行的代码
    print("计算成功,结果是:", x)
finally:
    # 无论是否产生异常都要执行的代码
    print("最终执行的代码,无论是否有异常。")

3. raise关键字

raise[Exception类型(异常描述信息)]
def check_age(age):
    if age < 0:
        raise ValueError("年龄不能为负数!")
    elif age < 18:
        raise ValueError("年龄太小,不能参与活动!")
    else:
        print("年龄符合要求,可以参与活动。")

try:
    check_age(-5)  # 传入负数,触发 ValueError
except ValueError as e:
    print(f"发生异常:{e}")

你可能感兴趣的:(python,正则表达式)