正则表达式

正则表达式是对字符串进行过滤的规则

python中re模块提供了正则表达式的匹配操作

常见匹配模式

参考


注意事项:

1.分组编号是从1开始。

2.分组的引用: \number

3.分组的别名及引用: (?P<alias>abc)(?P=alias)   匹配 abcabc

4.有些虽然用()括起来,但是并不是分组

5.能用非贪婪就不要用贪婪

re模块的几个函数

re.compile

将正则表达式编译成正则表达式对象。

pattern = re.compile(string,flags)

match函数

从起始位置开始匹配,且只能从起始位置开始匹配,找到第一个就返回或者返回None

result = re.match(pattern,string,flags=0)

#pattern可以直接用字符串形式表示,也可以用上面的compile后的正则表达式对象

#flags 通常用到re.S,可以用.匹配换行符\n。详见底部

result.group()

#返回结果:0表示匹配的整个串,1表示匹配的第一个分组,默认是0

search函数

扫描整个字符串,直到找到第一个就返回或者返回None

match和search比较

match必须跟字符串的头部匹配成功,否则返回None,而search是扫描整个字符串,不需要头部必须匹配。

结论

能用search就不要用match

findall函数

以列表的形式返回所有匹配的字符串

注意:列表中的元素将根据正则表达式的写法。

  正则表达式如果没有分组(包括非捕获的括号,例如"(?:abc)"),那么返回值是整个匹配串的列表;

  如果有分组,那返回的列表元素是元组,元组的元素是同一个匹配串中的所有分组。

sub(pattern, repl, string[, count])函数

当repl是一个字符串时,可以使用\id或\g、\g引用分组,但不能使用编号0。

当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。

count用于指定最多替换次数,不指定时全部替换。

s = 'i say, hello world!'

print re.sub('(\w+) (\w+)',r'\2 \1', s)

def func(m):

  return m.group(1).title() + ' ' + m.group(2).title()

print re.sub(pattern,func, s)

### output ###

# say i, world hello!

# I Say, Hello World!

#flags

• re.I(全拼:IGNORECASE): 忽略大小写(括号内是完整写法,下同)

• re.M(全拼:MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)

• re.S(全拼:DOTALL): 点任意匹配模式,改变'.'的行为

• re.L(全拼:LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定

• re.U(全拼:UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性

• re.X(全拼:VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • re模块手册 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以...
    喜欢吃栗子阅读 4,050评论 0 13
  • 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例...
    Python程序媛阅读 1,368评论 0 22
  • 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工...
    随风化作雨阅读 364评论 0 0
  • 说明 摘抄为主,忘记是在什么地方看见的原文了。原作者别打我,若你见了请联系我,增加你的版权和链接描述 整体过程 P...
    明慢慢阅读 1,031评论 0 8
  • 夜并不静 汽车隐约轰鸣 虫声此起彼伏 搅乱思绪 梦门紧闭 不知如何开启 灵魂踏遍绿水 不肯休息 多少个夜 从黑暗到...
    雪小凝阅读 208评论 0 1