• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    python中正则表达式?: ?= ?! 的用法

    发布者: 网神之王 | 发布时间: 2025-6-17 08:12| 查看数: 69| 评论数: 0|帖子模式

    正则表达式中使用的
    1. ?:
    复制代码
    1. ?=
    复制代码
    1. ?!
    复制代码
    是三种不同的正则表达式语法,它们分别代表非捕获组、正向前瞻断言和负向前瞻断言。

    1. ?: 用法
    1. (?:...)
    复制代码
    是一种非捕获组(non-capturing group)的语法。它用于将一部分正则表达式括在一起,但不将该部分作为单独的捕获组。这意味着即使匹配了这部分表达式,也不会在结果中创建新的捕获组。
    1. 正则表达式中的捕获组(capture group)是使用圆括号 () 包围的一部分表达式。这些捕获组在匹配到的字符串中标记了特定的部分,并将其保存起来以供稍后使用。
    复制代码
    如果还不清楚什么是捕获组,下面给一个例子就清楚了:
    1. import re

    2. pattern = r'a(.*)test'
    3. text = 'This is a good test.'

    4. match = re.search(pattern, text)
    5. if match:
    6.     print("Found word:", match.groups())
    7. # 输出
    8. # Found word: (' good ',)
    复制代码
    在这个示例中,
    1. (.*)
    复制代码
    是一个捕获组,用于将
    1. a
    复制代码
    1. test
    复制代码
    中间的字符提取出来。
    知道了捕获组,那么非捕获组也能猜出来了。有时你可能只想将表达式括在一起,但不想保存匹配结果。在这种情况下,可以使用非捕获组
    1. (?: ...)
    复制代码
    示例:
    1. import re

    2. pattern = r'(?:abc)def'
    3. text = 'abcdef'

    4. match = re.search(pattern, text)
    5. if match:
    6.     print("Match found")
    复制代码
    在这个示例中,
    1. (?:abc)
    复制代码
    是一个非捕获组,它将
    1. abc
    复制代码
    1. def
    复制代码
    组合在一起进行匹配,但不会作为单独的捕获组。

    2. ?= 用法
    1. ?=
    复制代码
    是正向前瞻断言(positive lookahead assertion)。它用于匹配某个子表达式后的位置,但不包含匹配到的子表达式在最终的结果中。前瞻断言用来确保某一部分的匹配被后续某一部分的条件匹配。
    示例:
    1. import re

    2. pattern = r'abc(?=def)'
    3. text = '.x abcdef123'
    4. text2 = '.x abc1def123'

    5. match = re.search(pattern, text)
    6. if match:
    7.     print("Match found:", match.group())
    8. # 输出
    9. # Match found: abc

    10. match = re.search(pattern, text2)
    11. if not match:
    12.     print("Match not found")
    13. # 输出
    14. # Match not found
    复制代码
    在这个示例中,
    1. abc(?=def)
    复制代码
    使用了正向前瞻断言。它将匹配
    1. abc
    复制代码
    后面跟着
    1. def
    复制代码
    的部分。在
    1. abcdef
    复制代码
    中,它匹配了
    1. abc
    复制代码
    ,因为
    1. abc
    复制代码
    后面是
    1. def
    复制代码


    3. ?! 用法
    1. ?!
    复制代码
    是负向前瞻断言(negative lookahead assertion)。它用于确保某个子表达式不匹配之后的位置,而不包含匹配到的子表达式在最终的结果中。
    用法示例:
    1. import re

    2. pattern = r'abc(?!def)'
    3. text = 'abcxyz'
    4. text2 = 'abcdef'

    5. match = re.search(pattern, text)
    6. if match:
    7.     print("Match found:", match.group())
    8. # 输出
    9. # Match found: abc

    10. match = re.search(pattern, text2)
    11. if not match:
    12.     print("Match not found")
    13. # 输出
    14. # Match not found
    复制代码
    在这个示例中,
    1. abc(?!def)
    复制代码
    使用了负向前瞻断言。它将匹配
    1. abc
    复制代码
    后面不跟着
    1. def
    复制代码
    的部分。在
    1. abcxyz
    复制代码
    中,它匹配了
    1. abc
    复制代码
    ,因为
    1. abc
    复制代码
    后面没有
    1. def
    复制代码


    4. 总结


      1. (?:...)
      复制代码
      是非捕获组,不会捕获组内的匹配结果。
      1. ?=
      复制代码
      是正向前瞻断言,确保匹配后的位置满足条件。
      1. ?!
      复制代码
      是负向前瞻断言,确保匹配后的位置不满足条件。
    到此这篇关于python中正则表达式?: ?= ?! 的用法的文章就介绍到这了,更多相关python中正则?: ?= ?! 内容请搜索脚本之家以前的文章或继续浏览下面的相

    来源:https://www.jb51.net/python/3397970fk.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表