pythonrematch返回值_Pythonre正则表达式学习
⼀、re.match
re.match 尝试从字符串的开始匹配⼀个模式,如:下⾯的例⼦匹配第⼀个单词。
import re
text = "JGood is a handsome boy, he is cool, clever, and "
m = re.match(r"(\w+)\s", text)
if m:
up(0), '\n', m.group(1)
else:
print 'not match'
re.match的函数原型为:re.match(pattern, string, flags)
第⼀个参数是正则表达式,这⾥为"(\w+)\s",如果匹配成功,则返回⼀个Match,否则返回⼀个None;
第⼆个参数表⽰要匹配的字符串;
第三个参数是标致位,⽤于控制正则表达式的匹配⽅式,如:是否区分⼤⼩写,多⾏匹配等等。
⼆、re.search
re.search函数会在字符串内查模式匹配,只到到第⼀个匹配然后返回,如果字符串没有匹配,则返回None。
import re
text = "JGood is a handsome boy, he is cool, clever, and "
m = re.search(r'\shan(ds)ome\s', text)
if m:
up(0), m.group(1)
else:
print 'not search'
re.search的函数原型为: re.search(pattern, string, flags)
每个参数的含意与re.match⼀样。
re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;⽽re.search匹配整个字符串,直到到⼀个匹配。
三、re.sub
re.sub⽤于替换字符串中的匹配项。下⾯⼀个例⼦将字符串中的空格 ' ' 替换成 '-' :
import re
text = "JGood is a handsome boy, he is cool, clever, and "
print re.sub(r'\s+', '-', text)
re.sub的函数原型为:re.sub(pattern, repl, string, count)
其中第⼆个函数是替换后的字符串;本例中为'-'
第四个参数指替换个数。默认为0,表⽰每个匹配项都替换。
re.sub还允许使⽤函数对匹配项的替换进⾏复杂的处理。如:re.sub(r'\s', lambda m: '[' + m.group(0) + ']', text, 0);将字符串中的空格' '替换为'[ ]'。
四、re.split
可以使⽤re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成⼀个单词列表。
五、re.findall
re.findall可以获取字符串中所有匹配的字符串。如:re.findall(r'\w*oo\w*', text);获取字符串中,包含'oo'的所有单词。
六、repile
可以把正则表达式编译成⼀个正则表达式对象。可以把那些经常使⽤的正则表达式编译成正则表达式对象,这样可以提⾼⼀定的效率。下⾯是⼀个正则表达式对象的⼀个例⼦:
import re
text = "JGood is a handsome boy, he is cool, clever, and "
regex = repile(r'\w*oo\w*')
print regex.findall(text)  #查所有包含'oo'的单词
print regex.sub(lambda m: '[' + m.group(0) + ']', text) #将字符串中含有'oo'的单词⽤[]括起来。
七、group()
返回匹配到的⼀个或者多个⼦组。如果是⼀个参数,那么结果就是⼀个字符串,如果是多个参数,那么结果就是⼀个参数⼀个item的元组。group1的 默认值为0(将返回所有的匹配值).如果groupN参数为0,相对应的返回值就是全部匹配的字符串,如果group1的值是[1…99]范围之内的,那 么将匹配对应括号组的字符串。如果组号是负的或者⽐pattern中定义的组号⼤,那么将抛出IndexError异常。如果pattern 没有匹配到, 但是group匹配到了,那么group的值也为None。如果⼀个pattern可以匹配多个,那么组对应的是样式匹配的最后⼀个。另外,⼦组是根据括 号从左向右来进⾏区分的。
>>> m=re.match("(\w+) (\w+)","abcd efgh, chaj")
>>> m.group()            # 匹配全部
'abcd efgh'
>>> m.group(1)    # 第⼀个括号的⼦组.
'abcd'
>>> m.group(2)
'efgh'
>>> m.group(1,2)          # 多个参数返回⼀个元组
('abcd', 'efgh')
>>> m=re.match("(?P\w+) (?P\w+)","sam lee")
>>> m.group("first_name")  #使⽤group获取含有name的⼦组
'sam'
>>> m.group("last_name")
'lee'
下⾯把括号去掉
>>> m=re.match("\w+ \w+","abcd efgh, chaj")
>>> m.group()
'abcd efgh'
>>> m.group(1)
Traceback (most recent call last):
File "", line 1, in
IndexError: no such group
If a group matches multiple times, only the last match is accessible:
如果⼀个组匹配多个,那么仅仅返回匹配的最后⼀个的。
>>> m=re.match(r"(..)+","a1b2c3")
>>> m.group(1)
'c3'
>>> m.group()
正则表达式获取括号内容
'a1b2c3'
Group的默认值为0,返回正则表达式pattern匹配到的字符串
>>> s="afkak1aafal12345adadsfa"
>>> pattern=r"(\d)\w+(\d{2})\w"
>>> m=re.match(pattern,s)
>>> print m
None
>>> m=re.search(pattern,s)
>>> m
>>> m.group()
'1aafal12345a'
>>> m.group(1)
'1'
>>> m.group(2)
'45'
>>> m.group(1,2,0)
('1', '45', '1aafal12345a')
返回⼀个包含所有⼦组的元组。Default是⽤来设置没有匹配到组的默认值的。Default默认是"None”,
>>> m=re.match("(\d+)\.(\d+)","23.123")
>>> m.groups()
('23', '123')
>>> m=re.match("(\d+)\.?(\d+)?","24") #这⾥的第⼆个\d没有匹配到,使⽤默认值"None"
>>> m.groups()
('24', None)
>>> m.groups("0")
('24', '0')
返回匹配到的所有命名⼦组的字典。Key是name值,value是匹配到的值。参数default是没有匹配到的⼦组的默认值。这⾥与groups()⽅法的参数是⼀样的。默认值为None
>>> m=re.match("(\w+) (\w+)","hello world")
>>> m.groupdict()
{}
>>> m=re.match("(?P\w+) (?P\w+)","hello world")
>>> m.groupdict()
{'secode': 'world', 'first': 'hello'}
通过上例可以看出,groupdict()对没有name的⼦组不起作⽤

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。