正则表达式学习笔记1

正则表达式:
精确匹配或者模糊匹配

比如:匹配所有日志中的IP,匹配所有的响应时间。
re:regular expression
所有的语言使用的正则大同小异。

match(一个结果的匹配):表示从字符串的开头匹配,如果从第一个字符就不能匹配,则匹配失败

>>> import re
>>> re.match(r"1","1abc")

r"1"是正则表达式
"1abc"是匹配的目标字符串

>>> re.search(r"\d","abcd1ed")
<_sre.SRE_Match object; span=(4, 5), match='1'>
>>>
>>> re.search(r"\d","abcd1ed").group()
'1'

search(一个结果的匹配):表示从字符串任意位置开始匹配
\d:表示匹配一个数字
.group():表示把匹配到的内容打印出来

>>> re.search(r"cd\d","abcd1ed").group()
'cd1'
>>> re.search(r"cd\ded","abcd1ed").group()
'cd1ed'

匹配多个数字:
\d+:表示匹配一个或多个数字

>>> re.findall(r"\d+","a1b2c3d4")
['1', '2', '3', '4']

findall(多个结果的匹配):表示匹配所有正则表达式匹配的内容

>>> re.search(r"\d","abcd1ed").group()
'1'
>>> re.search(r"\D","abcd1ed").group()
'a'
>>> re.search(r"\D+","abcd1ed").group()
'abcd'
>>> re.search(r"\D+","abcd1ed123ed").group()
'abcd'

\D:表示匹配非数字
\w:匹配数字和字母、下划线都会匹配(大小写均包含)
\W:表示取反,匹配非数字和字母、下划线
\s:表示匹配空白(" ",\t,\r,\n)
\S:表示匹配非空白
.:表示匹配所有的字符,除了回车(\n)之外的任意字符
+:表示匹配1个或多个
*:表示匹配0个或多个
?:表示匹配0次或1次
{a,b}:表示匹配a个到b个
正则表达式的贪婪性:尽量多匹配。
加个问号:表示抑制正则表达式的贪婪性
或的关系或者范围:[a-zA-Z]
[0-9]

>>> re.search(r"\w+","abcd1ed123ed").group()
'abcd1ed123ed'
>>> re.search(r"\W+","ab!@1ed123$%ed").group()
'!@'
>>> re.search(r"a\s+a","ab!@1ed123$a     a%ed").group()
'a     a'
>>> re.search(r"a\S+a","ab!@1ed123$a     a%ed").group()
'ab!@1ed123$a'
>>> re.match(r"\w*","abc").group()
'abc'
>>> re.match(r"\w*"," abc").group()
''
>>> re.match(r"\w"," abc").group()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>
>>>
>>> re.match(r"\w"," abc")
>>> print(re.match(r"\w"," abc"))
None
>>> print(re.match(r"\w"," abc").group())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match(r"\w*","abc").group()
'abc'
>>> re.match(r"\w+","abc").group()
'abc'
>>> re.match(r"\w+?","abc").group()
'a'
>>> re.search(r"a","abc")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.search(r"a","aaaaaa")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.search(r"a{3}","aaaaaa")
<_sre.SRE_Match object; span=(0, 3), match='aaa'>
>>> re.search(r"a{1,3}","a").group()
'a'
>>> re.search(r"a{1,3}","aa").group()
'aa'
>>> re.search(r"a{1,3}","aaa").group()
'aaa'
>>> re.search(r"a{1,3}","aaaa").group()
'aaa'
>>> re.search(r"a{4}","aaaa").group()
'aaaa'
>>> re.search(r"a{1,3}?","aaaa").group()
'a'
>>> re.match(r"1?","1abc").group()
'1'
>>> re.match(r"1?","abc").group()
''
>>> re.match(r"1?","1234abc").group()
'1'
>>> re.match(r"\d?","1234abc").group()
'1'
>>> re.match(r"\d*","1234abc").group()
'1234'
>>> s = "abc 13 33"
>>> if re.search(r"\d",s):
...     print("字符串有数字")
... else:
...     print("字符串没有数字")
...
字符串有数字

小练习:
判断一个字符串是否有连续的5个数字。

>>> s = "abc13333"
>>> if re.search(r"\d{5}",s):
...     print("字符串有5个连续数字")
... else:
...     print("字符串没有5个连续数字")
...
字符串有5个连续数字
>>> s = "1 I am a goodd boy"
>>> if re.search(r"[a-zA-Z]{5}",s):
...     print("got it")
...
got it
>>> s = "aaa  45678  "
>>> if re.search(r"[4-8]{5}",s):
...     print("got it")
...
got it
>>> re.search(r"a(\d+)c","a11243c")
<_sre.SRE_Match object; span=(0, 7), match='a11243c'>
>>> re.search(r"a(\d+)c","a11243c").group()
'a11243c'
>>> re.search(r"a(\d+)c","a11243c").group(1)
'11243'
>>> re.search(r"(a)(\d+)(c)","a11243c").group(1)
'a'
>>> re.search(r"(a)(\d+)(c)","a11243c").group(2)
'11243'
>>> re.search(r"(a)(\d+)(c)","a11243c").group(3)
'c'

正则的扫描顺序:从第一个字符开始向后扫描
re.match(r"1",“1b”)匹配对象,匹配得到后,就不再向后匹配了
re.match(r"1",“0b”) None,第一个就没匹配上,就不再向后匹配了
re.search(r"1",“ab1d”)匹配对象,就不再向后匹配了
re.search(r"1",“abcd”)None,把所有的字符串内容扫描一遍
re.search(r"\d+",“ab113d”)匹配对象113,就不再向后匹配了

[c-z]*
ababdfabdf
[’’, ‘’, ‘’, ‘’, ‘df’, ‘’, ‘’, ‘df’, ‘’]

>>> re.findall(r'[c-z]*',"ababdfabdf")
['', '', '', '', 'df', '', '', 'df', '']

re.I 忽略大小写

>>> re.match(r"a","abc")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.match(r"a","Abc")
>>> re.match(r"a","Abc",re.I)
<_sre.SRE_Match object; span=(0, 1), match='A'>
>>> re.search(r".","abcd")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.search(r".","abcd").group()
'a'
>>> re.search(r".","2bcd").group()
'2'
>>> re.search(r"."," bcd").group()
' '
>>> re.search(r".","\nbcd").group()
'b'
>>> re.match(r".","\nbcd").group()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>
>>>
>>> re.match(r"\.","\nbcd").group()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>
>>>
>>> re.match(r"\.",".d").group()
'.'
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值