在周五晚上,学习了一波 python 的 正则表达式的使用,下面是我的一些总结:
一、正则表达式的优势
如果我们没有使用正则表达式,如果我们想要在某个文本中查找某个字符串,例如"394-123-2445" 这类的电话号码,我们需要如下代码:
def isPhoneNumber(text):
if len(text) != 12:
return False
for i in range(0, 3):
if not text[i].isdecimal():
return False
if text[3] != '-':
return False
for i in range(4, 7):
if not text[i].isdecimal():
return False
if text[7] != '-':
return False
for i in range(8, 12):
if not text[i].isdecimal():
return False
return True
而使用正则表达式:
phoneRegex = re.compile(r'\d{3}-\d{3}-\d{4}')
mo = phoneRegex.search("myhone is 234-456-12345")
相比之下,正则表达式的使用则非常的简洁。
二、python 的正则表达式的使用
(1)创建正则表达式对象
regex = re.compile('\d\d\d'), 使用 re.compilte()编译一个正则表达式字符串。
(2)匹配 Regex 对象
mo = regex.search("my num : 123"), 把要查找的文本字符串传入 search() 返回,返回一个 Match 对象。
(3)返回匹配到的字符串
str = mo.group()。调用 Math 对象的 group() 对象返回匹配到的字符串
三、正则表达式的书写
(1) 精确匹配某个字符
str = 'abcd', 这种字符串会精确的匹配 abcd 字符串
(2)匹配任意字符
使用 '.' 符号来任意的一个字符
(3)是否匹配某个字符
使用 '?' 可以保证某个字符可以出现或者不出现。比如 str = 'a?' ,a 字符可以有或者没有
(4)匹配零次或者多次
使用 * 号,可以匹配出现零次或多次
(5)匹配一次或者多次
使用 + 号,可以匹配出现一次或多次
(6)可以指定匹配多少次
使用花括号可以指定匹配多少次,比如 regex = re.compile(r'a{2,4}'), 可以匹配 a 出现 2次到4次的字符串
四、python 内置的表示某类字符的表达式
\d 0-9 的任何数字
\D 除了 0-9 的数字以外的任何字符
\w 任何字母、数字或下划线字符
\W 除字母、数字和下划线以外的任何字符
\s 空格、制表符或换行符
\S 除空格、制表符和换行符以外的任何字符
五、re 的一些常量
查看 re.compile("\d\d", flag=0) flag 的一些常量值如下
re.I 或者 re.IGNORECASE
执行不区分大小写的匹配,表达式[A-Z] 将匹配小写字母
re.M 或者 re.MULTILINE
指定时,模式字符'^'
匹配字符串的开头和每行的开头(紧跟在每个换行符后面); 并且模式字符'$'
匹配字符串的末尾和每行末尾(紧接在每个换行符之前)。默认情况下,'^'
只匹配字符串的开始位置,并且'$'
只匹配字符串的末尾和匹配字符串末尾的换行符(如果有)。对应于内联标志(?m)
。
re.X 或者 re.VERBOSE
该标志允许您编写正则表达式,通过允许您在视觉上分离模式的逻辑部分并添加注释,该正则表达式看起来更好,并且更易读。在该模式内的空白被忽略,当在字符类,或当由反斜杠之后除,或令牌内的类似*?
,(?:
或(?P<...>
。当一行包含一个#
不在字符类中并且没有非转义反斜杠#
的行时,最左边的所有字符 都将被忽略。
re.S 或者 re.DOTALL
使'.'
特殊字符匹配任何字符,包括换行符; 没有这个标志,'.'
将会匹配除换行符之外的任何内容。对应于内联标志(?s)
。
六、符号表达式的总结:
?匹配零次或一次前面的分组。
*匹配零次或多次前面的分组。
+匹配一次或多次前面的分组。
{n}匹配 n 次前面的分组。
{n,}匹配 n 次或更多前面的分组。
{,m}匹配零次到 m 次前面的分组。
{n,m}匹配至少 n 次、至多 m 次前面的分组。
{n,m}?或*?或+?对前面的分组进行非贪心匹配。
^spam 意味着字符串必须以 spam 开始。
spam$意味着字符串必须以 spam 结束。
.匹配所有字符,换行符除外。
\d、\w 和\s 分别匹配数字、单词和空格。
\D、\W 和\S 分别匹配出数字、单词和空格外的所有字符。
[abc]匹配方括号内的任意字符(诸如 a、b 或 c)。
[^abc]匹配不在方括号内的任意字符。