zoukankan      html  css  js  c++  java
  • 正则表达式进阶——你从没想过的正则表达式使用方式

    对正则表达式感兴趣的可以玩一下RegexGolf:https://alf.nu/RegexGolf

    从中可以学到三个新的技能:

    1、正则表达式不匹配

    如果你想匹配含有镜像子串的字符串,如abba、anallagmatic、bassarisk等等。

    你可以写出正则表达式:

    (.)(.)21

    但是要是你不想匹配这些字符串的话,可以这么写正则表达式:

    ^(?!.*(.)(.)21)

    利用"^"和"(?!...)",即匹配字符串的开头,然后前视取反来完成。

    2、正则匹配合数长度的字符串

    正则表达式如下:

    ^(xx+)1+$

    3、正则匹配任意数的任意次幂长度的字符串

    匹配2的任意次幂长度的字符串的正则表达式如下:

    ^(?:(x+)(?=1$))*x$

    再者,匹配5的任意次幂长度的字符串的正则表达式如下:

    ^(?:(x+)1{3}(?=1$))*x$

    下面用程序验证一下:

    # -*- coding: utf-8 -*-
    
    import re
    
    for i in range(1000):
        s = 'x' * i
        if re.match(r'^(?:(x+)(?=1$))*x$', s):  # 匹配由x组成的长度为2的任意次幂的字符串
            print(len(s))
    
    print('-' * 79)
    
    for i in range(1000):
        s = 'x' * i
        if re.match(r'^(?:(x+)1{3}(?=1$))*x$', s):  # 匹配由x组成的长度为5的任意次幂的字符串
            print(len(s))

    输出结果是:

    1
    2
    4
    8
    16
    32
    64
    128
    256
    512
    -------------------------------------------------------------------------------
    1
    5
    25
    125
    625

  • 相关阅读:
    补充 函数详解
    Python web前端 11 form 和 ajax
    进程线程之间的通信
    面向对象epoll并发
    socket发送静态页面
    进程与线程的表示,属性,守护模式
    并发
    django, tornado
    并行
    非阻塞套接字编程, IO多路复用(epoll)
  • 原文地址:https://www.cnblogs.com/jacen789/p/11296241.html
Copyright © 2011-2022 走看看