正则表达式常见用法

130 阅读3分钟

正则表达式(Regular Expressions,简称正则或regex)是一种用于匹配字符串中字符组合的模式。它在文本处理、数据验证和字符串操作中非常有用。以下是正则表达式的一些常见用法及示例:

基础概念

  1. 字面量匹配:直接匹配字符

    r"hello"
    
  2. 元字符:具有特殊含义的字符,如 .^$*+?{}[]|() 等。

  3. 转义字符:用于匹配元字符本身,使用反斜杠 \

    r"\."
    

常见元字符及用法

  1. .:匹配任意单个字符(换行符除外)

    r"a.b"  # 可以匹配 "acb", "a2b", "a b" 等
    
  2. ^:匹配字符串的开头

    r"^hello"  # 匹配以 "hello" 开头的字符串
    
  3. $:匹配字符串的结尾

    r"world$"  # 匹配以 "world" 结尾的字符串
    
  4. *:匹配前面的字符0次或多次

    r"ab*c"  # 可以匹配 "ac", "abc", "abbc" 等
    
  5. +:匹配前面的字符1次或多次

    r"ab+c"  # 可以匹配 "abc", "abbc" 等,但不匹配 "ac"
    
  6. ?:匹配前面的字符0次或1次

    r"ab?c"  # 可以匹配 "ac", "abc"
    
  7. {n}:匹配前面的字符恰好n次

    r"ab{2}c"  # 只能匹配 "abbc"
    
  8. {n,m}:匹配前面的字符至少n次,至多m次

    r"ab{2,4}c"  # 可以匹配 "abbc", "abbbc", "abbbbc"
    

字符类

  1. []:匹配方括号中的任意字符

    r"[abc]"  # 可以匹配 "a", "b", "c" 中的任意一个
    
  2. [^]:匹配不在方括号中的任意字符

    r"[^abc]"  # 可以匹配除 "a", "b", "c" 之外的任意字符
    
  3. 范围

    r"[a-z]"  # 匹配小写字母
    r"[A-Z]"  # 匹配大写字母
    r"[0-9]"  # 匹配数字
    

预定义字符类

  1. \d:匹配任何数字,相当于 [0-9]

    r"\d"  # 匹配数字
    
  2. \D:匹配任何非数字字符,相当于 [^0-9]

    r"\D"  # 匹配非数字字符
    
  3. \w:匹配任何字母数字字符,相当于 [a-zA-Z0-9_]

    r"\w"  # 匹配字母或数字或下划线
    
  4. \W:匹配任何非字母数字字符,相当于 [^a-zA-Z0-9_]

    r"\W"  # 匹配非字母或数字或下划线的字符
    
  5. \s:匹配任何空白字符,包括空格、制表符、换页符等

    r"\s"  # 匹配空白字符
    
  6. \S:匹配任何非空白字符

    r"\S"  # 匹配非空白字符
    

边界匹配

  1. \b:匹配一个单词边界

    r"\bword\b"  # 匹配单词 "word"
    
  2. \B:匹配非单词边界

    r"\Bword\B"  # 匹配 "password" 中的 "word"
    

分组与捕获

  1. ():用于分组,捕获匹配的子串

    r"(abc)"  # 匹配 "abc" 并捕获
    
  2. (?:):非捕获分组

    r"(?:abc)"  # 匹配 "abc" 但不捕获
    
  3. \n:引用分组,n 是分组号

    r"(a)(b)\1\2"  # 匹配 "abab"
    

选择与管道

  1. |:匹配左边或右边的表达式
    r"abc|def"  # 匹配 "abc" 或 "def"
    

贪婪与懒惰匹配

  1. 贪婪匹配:尽可能多地匹配字符,默认模式

    r"a.*b"  # 匹配从第一个 "a" 到最后一个 "b" 之间的所有字符
    
  2. 懒惰匹配:尽可能少地匹配字符,使用 ?

    r"a.*?b"  # 匹配从第一个 "a" 到第一个 "b" 之间的所有字符
    

示例应用

  1. 匹配电子邮件地址

    r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
    
  2. 匹配URL

    r"https?://(?:www\.)?[a-zA-Z0-9./]+"
    
  3. 匹配电话号码

    r"\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}"
    
  4. 匹配日期(格式:YYYY-MM-DD):

    r"\d{4}-\d{2}-\d{2}"
    

Python中使用正则表达式

在Python中,可以使用re模块来处理正则表达式。常用函数包括:

  1. re.match:从字符串的起始位置匹配

    import re
    pattern = r"hello"
    result = re.match(pattern, "hello world")
    
  2. re.search:搜索整个字符串匹配

    result = re.search(pattern, "say hello world")
    
  3. re.findall:找到所有匹配

    result = re.findall(pattern, "hello hello world")
    
  4. re.sub:替换匹配项

    result = re.sub(r"hello", "hi", "hello world")