正则表达式规则
正则元字符和特性字符匹配普通字符普通字符按照字面意义进行匹配例如匹配字母 a 将匹配到文本中的 a 字符。元字符元字符具有特殊的含义例如\d匹配任意数字字符\w匹配任意字母数字字符.匹配任意字符除了换行符等。量词*匹配前面的模式零次或多次。匹配前面的模式一次或多次。?匹配前面的模式零次或一次。{n}匹配前面的模式恰好 n 次。{n,}匹配前面的模式至少 n 次。{n,m}匹配前面的模式至少 n 次且不超过 m 次。字符类[ ]匹配括号内的任意一个字符。例如[abc]匹配字符 a、b 或 c。[^ ]匹配除了括号内的字符以外的任意一个字符。例如[^abc]匹配除了字符 a、b 或 c 以外的任意字符。边界匹配^匹配字符串的开头。$匹配字符串的结尾。\b匹配单词边界。\B匹配非单词边界。分组和捕获( )用于分组和捕获子表达式。(?: )用于分组但不捕获子表达式。特殊字符\转义字符用于匹配特殊字符本身。.匹配任意字符除了换行符。|用于指定多个模式的选择。一、什么是正则表达式正则表达式Regular Expression是一种用于匹配、查找和替换文本中特定字符模式的工具。它通过一套特殊的语法规则能够灵活地描述字符串模式广泛应用于数据验证、文本处理、爬虫等场景。二、核心语法速查表1. 基本匹配符符号说明示例abc精确匹配字符串abcabc匹配 abc.匹配除换行符外的任意单个字符a.c匹配 abc, adc\转义字符\.匹配点号本身2. 字符类符号说明示例[abc]匹配a、b或c中的任意一个[aeiou]匹配任意元音[^abc]匹配除a、b、c外的任意字符[^0-9]匹配非数字[a-z]匹配a到z范围内的任意字符[A-Za-z]匹配任意字母\d匹配数字等价于[0-9]\d\d匹配两位数字\D匹配非数字\D匹配连续的非数字\w匹配单词字符字母、数字、下划线\w匹配一个单词\W匹配非单词字符\W匹配空格或标点\s匹配空白字符空格、制表符等\s匹配连续空白\S匹配非空白字符\S{3}匹配三个非空白字符3. 量词符号说明示例*匹配前面的子表达式0次或多次ab*c匹配 ac, abc, abbc匹配前面的子表达式1次或多次abc匹配 abc, abbc?匹配前面的子表达式0次或1次colou?r匹配 color, colour{n}精确匹配n次\d{4}匹配4位数字{n,}至少匹配n次a{2,}匹配至少两个a{n,m}匹配n到m次\d{2,4}匹配2-4位数字4. 位置锚点符号说明示例^匹配字符串的开始位置^Hello匹配以Hello开头的字符串$匹配字符串的结束位置end$匹配以end结尾的字符串\b匹配单词边界\bword\b精确匹配单词word\B匹配非单词边界\Bword匹配作为单词一部分的word5. 分组与捕获符号说明示例(abc)捕获分组(ab)匹配 abab(?:abc)非捕获分组只分组不捕获提高性能\1反向引用引用第一个捕获组(a)b\1匹配 aba(?nameexp)命名捕获组(?year\d{4})6. 逻辑与条件符号说明示例|或运算cat|dog匹配 cat 或 dog(?exp)正向先行断言\d(?元)匹配元前的数字(?!exp)负向先行断言\d(?!元)匹配后面不是元的数字(?exp)正向后行断言(?)\d匹配后的数字(?!exp)负向后行断言(?!)\d匹配前面不是的数字三、示例1.基础分组(abc) # 将abc作为一个整体 (ab) # 匹配ab、abab、ababab等 (ha){3} # 匹配hahaha示例正则 (ha){3} 匹配 hahaha ✓ 不匹配 haha ✗2. 捕获分组Capturing Groups默认情况下括号不仅用于分组还会捕获匹配的内容以便后续引用。编号捕获(\d{4})-(\d{2})-(\d{2}) # 第1组年份 # 第2组月份 # 第3组日期应用示例Pythonimport re text 日期2023-12-25 pattern r(\d{4})-(\d{2})-(\d{2}) match re.search(pattern, text) print(match.group(0)) # 整个匹配2023-12-25 print(match.group(1)) # 第1组2023 print(match.group(2)) # 第2组12 print(match.group(3)) # 第3组25 print(match.groups()) # 所有组(2023, 12, 25)3. 反向引用Backreferences在同一正则表达式中引用之前捕获的组。# 匹配重复单词 (\b\w\b)\s\1 # \1引用第1组捕获的内容示例文本hello hello world 正则(\b\w\b)\s\1 匹配hello hello 文本the the the 正则(\b\w\b)(\s\1){2} 匹配the the the断言Assertions断言不匹配字符只检查位置或条件。2.1 先行断言Lookahead检查当前位置后面是否满足条件。正向先行断言(?exp)后面必须跟着exp# 匹配后面是元的数字 \d(?元) # 示例 价格100元 → 匹配100 数量100个 → 不匹配负向先行断言(?!exp)后面不能跟着exp# 匹配后面不是元的数字 \d(?!元) # 示例 数量100个 → 匹配100 价格100元 → 不匹配2.2 后行断言Lookbehind检查当前位置前面是否满足条件。正向后行断言(?exp)前面必须是exp# 匹配前面是的数字 (?)\d # 示例 价格100 → 匹配100 价格100元 → 不匹配负向后行断言(?!exp)前面不能是exp# 匹配前面不是的数字 (?!)\d # 示例 价格100元 → 匹配100 价格100 → 不匹配