python入门学习-正则表达式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenlushun12/article/details/80027434

python中实现的排列组合

排列的定义:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 A(n,m)表示。

import itertools
mylists = list(itertools.permutations([1, 2, 3, 4], 3))
print(mylists) 
print(len(mylists)) # 24 

组合(combination),数学的重要概念之一。从n个不同元素中每次取出m个不同元素(0≤m≤n),不管其顺序合成一组,称为从n个元素中不重复地选取m个元素的一个组合。

import itertools
mylist = list(itertools.combinations([1, 2, 3, 4], 3))
print(mylist)

排列组合

import itertools
# 排列组合,生成密码的可能性
mylist = list(itertools.product([1, 2, 3, 4], repeat=4))
print(mylist)

re模块

https://www.cnblogs.com/tina-python/p/5508402.html

re.compile(pattern, flags=0)
# 从头匹配
re.match(pattern, string, flags=0)
re.fullmatch(pattern, string, flags=0)
# 全范围查找
re.search(pattern, string, flags=0) 
re.split(pattern, string, maxsplit=0, flags=0)
# 遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。
re.findall(pattern, string, flags=0)
re.finditer(pattern, string, flags=0)
re.sub(pattern, repl, string, count, flags=0)
re.subn(pattern, repl, string, count=0, flags=0)
re.error(msg, pattern=None, pos=None)
regex.search(string [, pos[, endpos]])

flags 的值可以是:

re.I(IGNORECASE) 忽略大小写,括号内是完整的写法
re.M(MULTILINE) 多行模式,改变^和$的行为
re.S(DOTALL) 点可以匹配任意字符,包括换行符
re.L(LOCALE) 做本地化识别的匹配,不推荐使用
re.U(UNICODE)  使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag
re.X(VERBOSE) 冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释

正则表达式中常用的字符含义

  • 普通字符和11个元字符:
字符 匹配范围 案例 字符串
普通字符 匹配自身 abc abc
. 匹配任意 除换行符”\n”外的字符(在DOTALL模式中也能匹配换行符 a.c
\ 转义字符,使后一个字符改变原来的意思 a.c;a\c a.c;a\c
* 匹配前一个字符0或多次 abc* ab;abccc
+ 匹配前一个字符1次或无限次 abc+ abc;abccc
? 匹配一个字符0次或1次 abc? ab;abc
^ 匹配字符串开头。在多行模式中匹配每一行的开头 ^abc abc
$ 匹配字符串末尾,在多行模式中匹配每一行的末尾 abc$ abc
| 或。匹配左右表达式任意一个,从左到右匹配,如果|没有包括在()中,则它的范围是整个正则表达式 abc def|abc|def
{} {m} 匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若省略n,则匹配m至无限次 ab{1,2}c abc
[] 字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。[^abc]表示取反,即非abc。所有特殊字符在字符集中都失去其原有的特殊含义。用\反斜杠转义恢复特殊字符的特殊含义。 a[bcd] eabeaceade
() 被括起来的表达式将作为分组,从表达式左边开始没遇到一个分组的左括号“(”,编号+1.分组表达式作为一个整体,可以后接数量词。表达式中的|仅在该组中有效。 (abc){2} a(123|456)c abcabc a456c

这里需要强调一下反斜杠\的作用:

  • 反斜杠后边跟元字符去除特殊功能;(即将特殊字符转义成普通字符)
  • 反斜杠后边跟普通字符实现特殊功能;(即预定义字符)
  • 引用序号对应的字组所匹配的字符串。

参考文档

https://blog.csdn.net/u014683535/article/details/51872093

猜你喜欢

转载自blog.csdn.net/chenlushun12/article/details/80027434