什么是正则表达式:
用某种字符串表达式制定了一个规则,可以实现字符串的模糊匹配
标准的正则表达式:
linux shell egrep
java perl python 都有正则表达式的。
正则表达式用途:
1分析日志,统计
2数据处理,替换、数据提取、删除等
3过滤敏感词
正则表达式的包:re
>>> import re
>>> pattern=re.compile(r"\d+")
正则表达式的内容:r"\d+" \d表示数字 +表示匹配1个或多个
编译正则表达式:re.compile(r"\d+")---》生成了一个名称叫做pattern的正则表达式对象<_sre.SRE_Pattern object。。。
用正则表达式去匹配"123abc"字符串的开头是否有一个或多个数字
pattern.match("123abc")--》如果匹配到了,则会把匹配到的内容存入变量里
我们可以调用,如:print pattern.match("123abc").group()匹配的内容是123
如果没有匹配到,print pattern.match("abc"),则打印None
print pattern.match("abc").group(),则报错:
AttributeError: 'NoneType' object has no attribute 'group'
>>> pattern.pattern #返回匹配的正则表达式
'\\d+'
>>> pattern.search("27hjdjh3434f3") #扫描整个字符串但 返回第一个匹配到的
<_sre.SRE_Match object at 0x0000000002DBA510>
>>> pattern.search("kj45j848954").group()
'45'
\w表示匹配:A-Za-z0-9_ \W表示匹配非A-Za-z0-9_的内容
>>> re.match(r"\w","_dsf") #开头匹配一个数字或者字母
<_sre.SRE_Match object at 0x0000000002DBA510>
>>> re.match(r"\w","_dsf").group()
'_'
>>> re.match(r"\w+","_?ds23782>f").group() #开头匹配一个或者多个数字或者字母
'_'
>>> re.match(r"\w+","_ds23782>f").group()
'_ds23782'
>>> re.match(r"\W+","_ds23782>f").group() #开头匹配一个非数字或者字母
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match(r"\W+",">?">f").group() #字符写的有问题
File "<stdin>", line 1
re.match(r"\W+",">?">f").group()
^
SyntaxError: EOL while scanning string literal
>>> re.match(r"\W+",">?>f").group()
'>?>'
\D匹配非数字
>>> a=re.compile(r"\D+") #\D匹配非数字
>>> a.match("34zhang")
>>> a.match("zh34ang")
<_sre.SRE_Match object at 0x000000000336A4A8>
>>> a.match("zh34ang").group()
'zh'
>>> a.match("GAH!.23")
<_sre.SRE_Match object at 0x0000000002DBA510>
>>> a.match("GAH!.23").group()
'GAH!.'
>>> if a.match("1.asf"):
... print "match something"
... else:
... print "no match"
...
no match
>>> print a.match("jka232").group()
jka
>>>
search与match的区别:
search是从全部字符串中查找,返回第一个匹配到的信息,如果都没有匹配的话就报错
match是在字符串的开头查找,找到了返回,没找到的报错
\s\d\w表示只能匹配一个字符
\s+表示匹配一个或多个空白字符
\r表示回车符号
\n表示换行符
\s表示匹配空白:空格、\t、\r、\n、\f、\S表示匹配非空白的内容
>>> re.match(r"\s"," f").group()
' '
>>> re.match(r"\S"," f").group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match(r"\S","1 f").group()
'1'
>>>
findall表示获取所有的正则表达式匹配的字符串,并存入一个list中
re.findall(r"\d+","a1b2c3")-----》[1,2,3]
>>> re.findall(r"\d+","ff232ksk44")
['232', '44']
.表示匹配任意的一个字符,除了\n
>>> re.match(r"a.c","abc").group() #匹配a和c之间有一个任意字符
'abc'
>>> re.match(r"a.c","axc").group()
'axc'
>>> re.match(r"a.c","a5c").group()
'a5c'
>>> re.match(r"a.c","a\nc").group() #.不能匹配\n
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>
>>> re.match(r"a.v","anvf").group()
'anv'
>>> re.match(r"a.v","a_vf").group()
'a_v'
>>> re.match(r"a+.v","a_vf").group()
'a_v'
*表示匹配0个或多个字符
>>> re.match(r"ab*c","ac") #表示匹配a和c之间有零或者多个b
r"ab*c"表示:一定要有a和c,且a和c之间可以有0个或多个b,且不能有任何一个其他字符
<_sre.SRE_Match object at 0x0000000002DBA510>
>>> re.match(r"ab*c","ac").group()
'ac'
>>> re.match(r"ab*c","abbbbbbc").group()
'abbbbbbc'
>>> re.match(r"ab*c","abbbbfbbc").group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match(r"ab\*c","ab*c").group() #匹配*号
'ab*c'
+表示连续匹配一个或多个字符
{2}表示匹配2个,{1,3}表示匹配1个至3个都可以
>>> re.match(r"a{2}c","aac").group() #表示匹配开头有两个a和一个b
'aac'
>>> re.match(r"a{2}c","ac").group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match(r"a{2}c","aaac").group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match(r"a{1,3}c","aaac").group() #表示匹配开头a有一到三个之间加一个c
'aaac'
>>> re.match(r"a{1,3}c","aac").group()
'aac'
>>> re.match(r"a{1,3}c","ac").group()
'ac'
.+表示匹配一个或多个字符
>>> re.match(r"a.+v","a_jhvfggvjjkvf").group() #取最长的符合条件的,贪婪性,不贪婪的要加?
'a_jhvfggvjjkv'
>>>
练习:英文一个句子,用正则表达式统计一下有几个单词?
>>> s="it is a dog"
>>> a=re.findall(r"\w+",s)
>>> a
['it', 'is', 'a', 'dog']
>>> len(a)
4