正则表达式模式与模式常见示例

正则表达式的包含的内容范围比较广,有相关语言的函数,方法,可选标志,模式等。这里我们专门介绍各种模式并给出示例。
正则表达式模式:
模式字符串使用特殊的语法来表示一个正则表达式:
字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。
多数字母和数字前加一个反斜杠时会拥有不同的含义。
标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
反斜杠本身需要使用反斜杠转义。
由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r’\t’,等价于 \t )匹配相应的特殊字符。
下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。
这里我们先给出模式截图,如图所示,图片来源于菜鸟教程在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对模式进一步演示之前我们先介绍几个下面将要经常用到的方法。
findall() 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
\d匹配任意数字,等价于[0-9]。
+匹配1个或多个表达式。
则\d+匹配一个或更多连续的数字。
我们下面将经常用到这个字符串

test_3='gygfgyhh1 321#@¥¥……?4564567441890ee344uy565%¥……\&%*#/、、}请问fgg\
        dfdsffhgf>.,65456721332S2#@s1!#$%^&*(()-2呃呃3饿饿32の\nwqdewdwedwqd[wang王宇轩18'

代码栏为代码与注释,下面为运行结果

print(re.findall('\d+',test_3))  #匹配所有的连续数字,d匹配数字,+匹配1到多个数字,d+匹配连续的的数字,findall匹配所有的子串。

[‘1’, ‘321’, ‘4564567441890’, ‘344’, ‘565’, ‘65456721332’, ‘2’, ‘1’, ‘2’, ‘3’, ‘32’, ‘18’]

print(re.findall('^g',test_3))   #^从头开始匹配,\d表示匹配数字,即从头开始配数字
print(re.findall('\d+$',test_3))  #$从末尾开始匹配

[‘g’]
[‘18’]

print(re.findall('\d.',test_3))  #.匹配任意字符,除了换行符,这里为数字与任意字符组合

['1 ', ‘32’, ‘1#’, ‘45’, ‘64’, ‘56’, ‘74’, ‘41’, ‘89’, ‘0e’, ‘34’, ‘4u’, ‘56’, ‘5%’, ‘65’, ‘45’, ‘67’, ‘21’, ‘33’, ‘2S’, ‘2#’, ‘1!’, ‘2呃’, ‘3饿’, ‘32’, ‘18’]

print(re.findall('\d...',test_3))  #...用来表示一组字符,3个.即为匹配3个任意字符

[‘1 32’, ‘1#@¥’, ‘4564’, ‘5674’, ‘4189’, ‘0ee3’, ‘44uy’, ‘565%’, ‘6545’, ‘6721’, ‘332S’, ‘2#@s’, ‘1!#$’, ‘2呃呃3’]

print(re.findall('\d[23]',test_3))  #用来表示一组字符,单独列出:[23]匹配2或者3

[‘32’, ‘72’, ‘13’, ‘32’, ‘32’]

print(re.findall('\d[^23]',test_3))  #不在[]中的字符:[^23] 匹配除了2,3之外的字符。

['1 ', ‘21’, ‘45’, ‘64’, ‘56’, ‘74’, ‘41’, ‘89’, ‘0e’, ‘34’, ‘4u’, ‘56’, ‘5%’, ‘65’, ‘45’, ‘67’, ‘21’, ‘2S’, ‘2#’, ‘1!’, ‘2呃’, ‘3饿’, ‘2の’, ‘18’]

print(re.findall('\d*',test_3))  #匹配0或多个的表达式,这里即匹配0到多个的数字

[’’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘1’, ‘’, ‘321’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘4564567441890’, ‘’, ‘’, ‘344’, ‘’, ‘’, ‘565’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘65456721332’, ‘’, ‘2’, ‘’, ‘’, ‘’, ‘1’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘2’, ‘’, ‘’, ‘3’, ‘’, ‘’, ‘32’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘18’, ‘’]

print(re.findall('\d?',test_3))  #匹配0个或一个由前面的正则表达式定义的片段,非贪婪模式(即匹配到就返回)

[’’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘1’, ‘’, ‘3’, ‘2’, ‘1’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘4’, ‘5’, ‘6’, ‘4’, ‘5’, ‘6’, ‘7’, ‘4’, ‘4’, ‘1’, ‘8’, ‘9’, ‘0’, ‘’, ‘’, ‘3’, ‘4’, ‘4’, ‘’, ‘’, ‘5’, ‘6’, ‘5’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘6’, ‘5’, ‘4’, ‘5’, ‘6’, ‘7’, ‘2’, ‘1’, ‘3’, ‘3’, ‘2’, ‘’, ‘2’, ‘’, ‘’, ‘’, ‘1’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘2’, ‘’, ‘’, ‘3’, ‘’, ‘’, ‘3’, ‘2’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘1’, ‘8’, ‘’]

print(re.findall('\d{2}',test_3))  #匹配n个前面的字符,比如该例子为匹配两个数字

[‘32’, ‘45’, ‘64’, ‘56’, ‘74’, ‘41’, ‘89’, ‘34’, ‘56’, ‘65’, ‘45’, ‘67’, ‘21’, ‘33’, ‘32’, ‘18’]

print(re.findall('\d{2,}',test_3))  #精确匹配n个前面表达式,如d{2,}等价于\d\d+
print(re.findall('\d\d+',test_3))

[‘321’, ‘4564567441890’, ‘344’, ‘565’, ‘65456721332’, ‘32’, ‘18’]
[‘321’, ‘4564567441890’, ‘344’, ‘565’, ‘65456721332’, ‘32’, ‘18’]

print(re.findall("\d{2,4}",test_3))  #匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式

[‘321’, ‘4564’, ‘5674’, ‘4189’, ‘344’, ‘565’, ‘6545’, ‘6721’, ‘332’, ‘32’, ‘18’]

print(re.findall("[1|2|4]",test_3))  #a| b	匹配a或b。这里匹配1或2或4

[‘1’, ‘2’, ‘1’, ‘4’, ‘4’, ‘4’, ‘4’, ‘1’, ‘4’, ‘4’, ‘4’, ‘2’, ‘1’, ‘2’, ‘2’, ‘1’, ‘2’, ‘2’, ‘1’]

print(re.findall("(\d)",test_3))  #(re)	匹配括号内的表达式,也表示一个组

[‘1’, ‘3’, ‘2’, ‘1’, ‘4’, ‘5’, ‘6’, ‘4’, ‘5’, ‘6’, ‘7’, ‘4’, ‘4’, ‘1’, ‘8’, ‘9’, ‘0’, ‘3’, ‘4’, ‘4’, ‘5’, ‘6’, ‘5’, ‘6’, ‘5’, ‘4’, ‘5’, ‘6’, ‘7’, ‘2’, ‘1’, ‘3’, ‘3’, ‘2’, ‘2’, ‘1’, ‘2’, ‘3’, ‘3’, ‘2’, ‘1’, ‘8’]

下面几组适合比对记忆,因此放在一块

print(re.findall("\w","test_3"))  #匹配数字字母下划线
print(re.findall("\W",test_3))  #匹配非数字字母下划线

[‘t’, ‘e’, ‘s’, ‘t’, ‘_’, ‘3’]
[’ ', ‘#’, ‘@’, ‘¥’, ‘¥’, ‘…’, ‘…’, ‘?’, ‘%’, ‘¥’, ‘…’, ‘…’, ‘\’, ‘&’, ‘%’, ‘’, ‘#’, ‘/’, ‘、’, ‘、’, ‘}’, ’ ', ’ ', ’ ', ’ ', ’ ', ’ ', ’ ', ’ ', ‘>’, ‘.’, ‘,’, ‘#’, ‘@’, ‘!’, ‘#’, ‘$’, ‘%’, ‘^’, ‘&’, '’, ‘(’, ‘(’, ‘)’, ‘-’, ‘\n’, ‘[’]

print(re.findall('\s',test_3))  #匹配任意空白字符,等价于[\t\n\r\f]
print(re.findall('\S',test_3))  #匹配任意非空字符

[’ ', ’ ', ’ ', ’ ', ’ ', ’ ', ’ ', ’ ', ’ ', ‘\n’]
[‘g’, ‘y’, ‘g’, ‘f’, ‘g’, ‘y’, ‘h’, ‘h’, ‘1’, ‘3’, ‘2’, ‘1’, ‘#’, ‘@’, ‘¥’, ‘¥’, ‘…’, ‘…’, ‘?’, ‘4’, ‘5’, ‘6’, ‘4’, ‘5’, ‘6’, ‘7’, ‘4’, ‘4’, ‘1’, ‘8’, ‘9’, ‘0’, ‘e’, ‘e’, ‘3’, ‘4’, ‘4’, ‘u’, ‘y’, ‘5’, ‘6’, ‘5’, ‘%’, ‘¥’, ‘…’, ‘…’, ‘\’, ‘&’, ‘%’, ‘’, ‘#’, ‘/’, ‘、’, ‘、’, ‘}’, ‘请’, ‘问’, ‘f’, ‘g’, ‘g’, ‘d’, ‘f’, ‘d’, ‘s’, ‘f’, ‘f’, ‘h’, ‘g’, ‘f’, ‘>’, ‘.’, ‘,’, ‘6’, ‘5’, ‘4’, ‘5’, ‘6’, ‘7’, ‘2’, ‘1’, ‘3’, ‘3’, ‘2’, ‘S’, ‘2’, ‘#’, ‘@’, ‘s’, ‘1’, ‘!’, ‘#’, ‘$’, ‘%’, ‘^’, ‘&’, '’, ‘(’, ‘(’, ‘)’, ‘-’, ‘2’, ‘呃’, ‘呃’, ‘3’, ‘饿’, ‘饿’, ‘3’, ‘2’, ‘の’, ‘w’, ‘q’, ‘d’, ‘e’, ‘w’, ‘d’, ‘w’, ‘e’, ‘d’, ‘w’, ‘q’, ‘d’, ‘[’, ‘w’, ‘a’, ‘n’, ‘g’, ‘王’, ‘宇’, ‘轩’, ‘1’, ‘8’]

print(re.findall('\d',test_3))  #匹配任意数字,等价于 [0-9]。
print(re.findall('\D',test_3))  #匹配任意非数字
['1', '3', '2', '1', '4', '5', '6', '4', '5', '6', '7', '4', '4', '1', '8', '9', '0', '3', '4', '4', '5', '6', '5', '6', '5', '4', '5', '6', '7', '2', '1', '3', '3', '2', '2', '1', '2', '3', '3', '2', '1', '8']
['g', 'y', 'g', 'f', 'g', 'y', 'h', 'h', ' ', '#', '@', '¥', '¥', '…', '…', '?', 'e', 'e', 'u', 'y', '%', '¥', '…', '…', '\\', '&', '%', '*', '#', '/', '、', '、', '}', '请', '问', 'f', 'g', 'g', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'd', 'f', 'd', 's', 'f', 'f', 'h', 'g', 'f', '>', '.', ',', 'S', '#', '@', 's', '!', '#', '$', '%', '^', '&', '*', '(', '(', ')', '-', '呃', '呃', '饿', '饿', 'の', '\n', 'w', 'q', 'd', 'e', 'w', 'd', 'w', 'e', 'd', 'w', 'q', 'd', '[', 'w', 'a', 'n', 'g', '王', '宇', '轩']
print(re.findall('\Ag',test_3))  #匹配字符串开始
print(re.findall('8\Z',test_3))  #匹配字符串结束,如果存在换行,只匹配到换行前的结束字符串
print(re.findall('8',test_3))  #与加结束\Z对比

[‘g’]
[‘8’]
[‘8’, ‘8’]

print(re.findall('g\b',test_3))  #匹配一个单词边界
print(re.findall('g\B',test_3))  #匹配非单词边界。

[]
[‘g’, ‘g’, ‘g’, ‘g’, ‘g’, ‘g’]

print(re.findall('\n',test_3))  #\n, \t, 等。	匹配一个换行符。匹配一个制表符, 等
print(re.findall('\t',test_3))

[’\n’]
[]

猜你喜欢

转载自blog.csdn.net/qq_45701131/article/details/111642866