1. compile()函数
编译正则表达式模式,返回一个对象的模式(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率)。
格式:
re.compile(pattern,flags=0)
例如:
import re
text = "The moment you think about giving up,think of the reason why you held on so long."
text1 = "Life is a journey,not the destination,but the scenery along the should be and the mood at the view."
rr = re.compile(r'\w*o\w*')
print(rr.findall(text)) #查找text中所有包含'o'的单词
print(rr.findall(text1)) #查找text1中所有包含'o'的单词
运行结果如下:
['moment', 'you', 'about', 'of', 'reason', 'you', 'on', 'so', 'long']
['journey', 'not', 'destination', 'along', 'should', 'mood']
- pattern: 编译时用的表达式字符串(即正则表达式);
- flags:(可选)编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等。
常用的flags有:
标志 | 含义 |
---|---|
re.S(DOTALL) | 使.匹配包括换行在内的所有字符 |
re.I(IGNORECASE) | 使匹配对大小写不敏感 |
re.L(LOCALE) | 做本地化识别(locale-aware)匹配,法语等 |
re.M(MULTILINE) | 多行匹配,影响^和$ |
re.X(VERBOSE) | 该标志通过给予更灵活的格式以便将正则表达式写得更易于理解 |
re.U | 根据Unicode字符集解析字符,这个标志影响\w,\W,\b,\B |
2. match()函数
在字符串刚开始的位置匹配,在开头匹配到目的字符便返回,如果开头没有目的字符将匹配失败,返回None。
格式:
re.match(pattern, string, flags=0)
例如:
print(re.match('edu','educoder.net').group())
print(re.match('edu','www.educoder.net').group())
运行结果如下:
注:match()函数返回的是一个match object对象,而match object对象有以下方法:
- group():返回被正则匹配的字符串;
- start():返回匹配开始的位置;
- end():返回匹配结束的位置;
- span():返回一个元组包含匹配 (开始,结束) 的位置;
- groups():返回正则整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。
3. search()函数
re.search()函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回。如果字符串没有匹配,则返回None。
格式:
re.search(pattern, string, flags=0)
print(re.search('edu','www.educoderedu.net').group())
print(re.search('eduaaa','www.educoderedu.net').group())
运行结果如下:
- 注:match()和search()比较类似,它们的区别在于match()只匹配字符串的开头,如果开头没有出现目的字符串,即使后面出现了也不会进行匹配;search()函数会在整个字符内匹配,只要找到一个目的字符串就返回。