Python正则表达式中的`^`和`[]`及常见含义

作者:

文章目录
  • ^ 在正则表达式中有两种常见的含义,具体取决于它的位置:
  • [ ] 在正则表达式中表示字符集(character set),用于匹配其中任意一个字符。下面详细讲解其具体用法和规则:
  • 目录
    • 一、正则表达式:符号^
      • 1. 在字符集 [ ] 的开头时,表示取反(negation)。
      • 2. 在字符集之外时,表示字符串的开始(anchor)。
      • 总结:
    • 二、正则表达式:字符集[ ]
      • 1. 基本用法
      • 示例:
      • 2. 取反(Negation)
      • 示例:
      • 3. 范围(Range)
      • 示例:
      • 4. 特殊字符在字符集中的处理
      • 示例:
      • 5. 与预定义字符类的关系
      • 示例:
      • 6. 与锚点 ^ 的区别
      • 示例:
      • 总结

    在正则表达式中有两种常见的含义,具体取决于它的位置:

    例如:

    • [^s]:匹配任何非空白字符。
    • [^a-z]:匹配任何不在 a-z 范围内的字符。

    例如:

    • ^https:匹配以 “https” 开头的字符串。
    • ^d:匹配以数字开头的字符串。

    • 在 [ ] 内:取反。
    • 在 [ ] 外:字符串开始。
      需要根据上下文判断 ^ 的具体含义。

    [ ] 在正则表达式中表示字符集(character set),用于匹配其中任意一个字符。下面详细讲解其具体用法和规则:

    字符集 [ ] 中的每个字符都是独立的匹配选项。例如:

    • [abc]:匹配 ab 或 c 中的任意一个字符。
    • [0123456789]:匹配任意一个数字(等价于 [0-9])。

    import re
    text = "a1b2c3"
    print(re.findall(r'[abc]', text))  # 输出: ['a', 'b', 'c']
    print(re.findall(r'[0-9]', text))  # 输出: ['1', '2', '3']

    如果 ^ 出现在字符集的开头(即 [^...]),表示匹配不在该字符集中的任意字符。例如:

    • [^abc]:匹配除了 abc 之外的任意字符。
    • [^0-9]:匹配非数字字符(等价于 D)。

    text = "a1b2c3!@#"
    print(re.findall(r'[^abc]', text))  # 输出: ['1', '2', '3', '!', '@', '#']
    print(re.findall(r'[^0-9]', text))  # 输出: ['a', 'b', 'c', '!', '@', '#']

    在字符集中,可以用 - 表示字符范围(需确保 - 不在开头或结尾,否则会被视为普通字符)。例如:

    • [a-z]:匹配任意小写字母。
    • [A-Z]:匹配任意大写字母。
    • [0-9]:匹配任意数字(等价于 d)。

    text = "Hello World 123"
    print(re.findall(r'[a-z]', text))  # 输出: ['e', 'l', 'l', 'o', 'o', 'r', 'l', 'd']
    print(re.findall(r'[A-Z]', text))  # 输出: ['H', 'W']
    print(re.findall(r'[0-9]', text))  # 输出: ['1', '2', '3']

    • 普通元字符(如 *+?)在字符集中会被视为普通字符,无需转义。例如:
      • [*+]:匹配 * 或 +
    • 如果需要匹配 - 或 ],需注意:
      • - 放在开头或结尾(如 [a-] 或 [-a])。
      • ] 放在开头(如 []a])或转义(如 []])。

    text = "a*b+c?d]"
    print(re.findall(r'[*+?]', text))  # 输出: ['*', '+', '?']
    print(re.findall(r'[]]', text))    # 输出: [']']

    字符集 [ ] 可以实现类似预定义字符类(如 dws)的功能,但更灵活:

    • d ≈ [0-9](数字)。
    • w ≈ [a-zA-Z0-9_](单词字符)。
    • s ≈ [tnrfv](空白字符)。

    text = "abc123 _!@#"
    print(re.findall(r'w', text))    # 输出: ['a', 'b', 'c', '1', '2', '3', '_']
    print(re.findall(r'[a-zA-Z0-9_]', text))  # 效果相同

    • ^ 在字符集外表示字符串开头(如 ^abc 匹配以 abc 开头的字符串)。
    • ^ 在字符集内表示取反(如 [^abc] 匹配非 abc 的字符)。

    text = "abc123 xyz"
    print(re.findall(r'^abc', text))    # 输出: ['abc'](匹配开头)
    print(re.findall(r'[^abc]', text))  # 输出: ['1', '2', '3', ' ', 'x', 'y', 'z'](取反)

    • [ ]:字符集,匹配其中任意一个字符。
    • [^...]:取反字符集,匹配不在其中的字符。
    • -:在字符集中表示范围(如 [a-z])。
    • 注意与锚点 ^ 的区别,以及特殊字符的处理。

    到此这篇关于Python 正则表达式中的`^`和`[]`的文章就介绍到这了,更多相关Python 正则表达式内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Python 正则表达式(?=…)和(?<=…)符号的使用
    • python使用正则匹配判断字符串中含有某些特定子串及正则表达式详解
    • Python正则表达式字符串的匹配、替换、分割、查找方式
    • Python如何使用正则表达式识别代码中的中文、英文和数字
    • 解读python正则表达式括号问题
    • python中使用正则表达式的方法详解
    • python常用的正则表达式大全

    站内搜索