码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式进阶——你从没想过的正则表达式使用方式

时间:2019-08-03 21:18:18      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:print   方式   div   mat   正则   输出   code   https   http   

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

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

1、正则表达式不匹配

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

你可以写出正则表达式:

(.)(.)\2\1

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

^(?!.*(.)(.)\2\1)

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

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

 

正则表达式进阶——你从没想过的正则表达式使用方式

标签:print   方式   div   mat   正则   输出   code   https   http   

原文地址:https://www.cnblogs.com/jacen789/p/11296241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!