正则表达式、原始字符串及re

  • re是python中的一个文本解析工具,常用的方法有:

    来源:https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonre/index.html

    compile

    re.compile(pattern[, flags])

    把正则表达式的模式和标识转化成正则表达式对象,供 match() 和 search() 这两个函数使用。

    re 所定义的 flag 包括:

    re.I 忽略大小写

    re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境

    re.M 多行模式

    re.S 即为’ . ’并且包括换行符在内的任意字符(’ . ’不包括换行符)

    re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库

    re.X 为了增加可读性,忽略空格和’ # ’后面的注释

    例:以下两种用法结果相同:

    A)

    compiled_pattern = re.compile(pattern) ``result = compiled_pattern.match(string)

    B)

    result = re.match(pattern, string)

    re.search(pattern, string[, flags])

    在字符串中查找匹配正则表达式模式的位置,返回 MatchObject 的实例,如果没有找到匹配的位置,则返回 None。

    对于已编译的正则表达式对象来说(re.RegexObject),有以下 search 的方法:

    search (string[, pos[, endpos]])

    若 regex 是已编译好的正则表达式对象,regex.search(string, 0, 50) 等同于 regex.search(string[:50], 0)。

    具体示例如下。

    >>> pattern = re.compile("a") ``>>> pattern.search("abcde")     # Match at index 0 ``>>> pattern.search("abcde", 1)  # No match;

    re.match(pattern, string[, flags])

    判断 pattern 是否在字符串开头位置匹配。对于 RegexObject,有:

    match(string[, pos[, endpos]])

    match() 函数只在字符串的开始位置尝试匹配正则表达式,也就是只报告从位置 0 开始的匹配情况,而 search() 函数是扫描整个字符串来查找匹配。如果想要搜索整个字符串来寻找匹配,应当用 search()。

    split

    re.split(pattern, string[, maxsplit=0, flags=0])

    此功能很常用,可以将将字符串匹配正则表达式的部分割开并返回一个列表。对 RegexObject,有函数:

    split(string[, maxsplit=0])

    例如,利用上面章节中介绍的语法:

    >>> re.split('\W+', 'test, test, test.') ``['test', 'test', 'test', ''] ``>>> re.split('(\W+)', ' test, test, test.') ``[' test ', ', ', ' test ', ', ', ' test ', '.', ''] ``>>> re.split('\W+', ' test, test, test.', 1) ``[' test ', ' test, test.']

    对于一个找不到匹配的字符串而言,split 不会对其作出分割,如:

    >>> re.split('a*', 'hello world') ``['hello world']

    re.findall(pattern, string[, flags])

    在字符串中找到正则表达式所匹配的所有子串,并组成一个列表返回。同样 RegexObject 有:

    findall(string[, pos[, endpos]])

    示例如下:

    #get all content enclosed with [], and return a list ``>>> return_list = re.findall("(\[.*?\])",string)

    re.finditer(pattern, string[, flags])

    和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并组成一个迭代器返回。同样 RegexObject 有:

    finditer(string[, pos[, endpos]])

    sub

    re.sub(pattern, repl, string[, count, flags])

    在字符串 string 中找到匹配正则表达式 pattern 的所有子串,用另一个字符串 repl 进行替换。如果没有找到匹配 pattern 的串,则返回未被修改的 string。Repl 既可以是字符串也可以是一个函数。对于 RegexObject 有:

    sub(repl, string[, count=0])

    此语法的示例有:

    >>> p = re.compile( '(one|two|three)') `` ``>>> p.sub( 'num', 'one word two words three words') ``'num word num words num words'

    同样可以用以下方法,并指定 count 为 1(只替换第一个):

    >>> p.sub( 'num', ' one word two words three words', count=1)

    ' num word two words three words'

    subn

    re.subn(pattern, repl, string[, count, flags])

    该函数的功能和 sub() 相同,但它还返回新的字符串以及替换的次数。同样 RegexObject 有:

    subn(repl, string[, count=0])

  • 区分正则表达式易错的大小写

    正则表达式特殊序列:

    \A 只在字符串开头进行匹配。
    \b 匹配位于开头或者结尾的空字符串
    \B 匹配不位于开头或者结尾的空字符串
    \d 匹配任意十进制数,相当于 [0-9]
    \D 匹配任意非数字字符,相当于 [^0-9]
    \s 匹配任意空白字符,相当于 [ \t\n\r\f\v]
    \S 匹配任意非空白字符,相当于 [^ \t\n\r\f\v]
    \w 匹配任意数字和字母,相当于 [a-zA-Z0-9_]
    \W 匹配任意非数字和字母的字符,相当于 [^a-zA-Z0-9_]
    \Z 只在字符串结尾进行匹配

    来源:https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonre/index.html

    注意这里面,关于大小写的作用是反过来的:\s(小写)是匹配空白字符,而\S(大写)则是匹配非空白字符;\w匹配数字和字母,而\W匹配的是非数字和字母,这就很容易用错。不过规律是一致的,就是小写是描述特征的,而大写的匹配的是小写的“非”

  • 正则表达式和原始字符串混起来,就有了一丝复杂的意味

    原始字符串的意思是:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。

    我们往往容易误以为原始字符串的意思是“只能表示字面上的字符”,在一些简单使用的情况下,这是正确的,但是在re模块中使用是有问题的:

    compile

    re.compile(pattern[, flags])

    把正则表达式的模式和标识转化成正则表达式对象,供 match() 和 search() 这两个函数使用。

    这里我们输入的字符串实际上是pattern,如果使用原始字符串,就是将输入的字符串直接当成pattern

    例如:\w表示匹配任意数字和字母,这个\是我们需要的,但是如果直接输入“\w"会将\w认为是转义字符,传递的pattern就不是\w了.如果不使用原始字符串,应该写成re.compile("\\w");而如果使用了原始字符串,应该是re.compile(r"\w")

    而例如+号,它本身就不存在转义的问题,所以无论是否使用原始字符串,只要我们想获得的是+号表示的1到多次的效果,就都不要画蛇添足加\。但是如果我们需要表示的都是+这个符号本身呢?那么这两种情况都需要加\。注意,由于Python中没有规定\+这个转义字符,所以它其实是被Python当成\和+传入re的,而re根据\将+转义为没有特殊效果的+字符。这里要搞清

    说起来不太难,但是使用的时候还是有点坑的其实,尤其是脑子容易绕不过来。所以我觉得干脆,正则表达式上能不用原始字符串就不用了吧

    (而且我实测,原始字符串在这里好像会有薛定谔bug,一开始运行就是不过,折腾了半天改回原来不知道怎么就过了,很迷````)

正则表达式、原始字符串及re的更多相关文章

  1. devi into python 笔记(六)正则表达式 原始字符串

    字符串函数replace: #string.replace: #字符串的replace方法:替换子串,不改变原来的字符串 s = "broad road" #打印出来会发现不单单是 ...

  2. Notepad++快捷键&正则表达式替换字符串&插件

    Notepad++绝对是windows下进行程序编辑的神器之一,要更快速的使用以媲美VIM,必须灵活掌握它的快捷键,下面对notepad++默认的快捷键做个整理(其中有颜色的为常用招数): 1. 文件 ...

  3. 42-python基础-python3-字符串-原始字符串

    原始字符串 可以在字符串开始的引号之前加上 r,使它成为原始字符串. “原始字符串”完全忽略所有的转义字符,打印出字符串中所有的倒斜杠. 如果输入的字符串包含许多倒斜杠,比如正则表达式字符串,那么原始 ...

  4. C++11 STL Regex正则表达式与字符串字段解析

    简单的日期正则表达式 一个简单的日期解析程序,从yyyy-mm-dd格式的日期字符串中,分别获取年月日. 先设置一个简单的正则表达式,4位数字的"年",1-2位数字的"月 ...

  5. python 模块、原始字符串

    模块 三种方法: import from 模块 import 成员,成员 from 模块 import * *代表所有的成员 隐藏成员: 模块中以下划线_开头的属性 隐藏成员不会被from 模块 im ...

  6. JAVA----编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符

    package com.pb.demo.packclass.demo1; import java.util.HashSet; /** * 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符 ...

  7. JS正则表达式获取字符串中特定字符

    JS正则表达式获取字符串中得特定字符,通过replace的回调函数获取. 实现的效果:在字符串中abcdefgname='test'sddfhskshjsfsjdfps中获取name的值test  实 ...

  8. java 正则匹配空格字符串 正则表达式截取字符串

    java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...

  9. 正则表达式去除字符串左右空格函数 调用方法是,str.Trim();

    正则表达式去除字符串左右空格函数 调用方法是,str.Trim(); String.prototype.Trim = function() { return this.replace(/(^\s*)| ...

随机推荐

  1. ubuntu E: Could not get lock /var/lib/apt/lists/lock 异常信息

    转载:https://www.cnblogs.com/qq952693358/p/6537846.html 在更换软件源时遇到了如下问题: sudo apt-get update E: Could n ...

  2. linux 下使用命令查看jvm信息

    java程序员除了编写业务代码之外,特别是项目上线之后,更需要关注的是系统的性能表现,这个时候就需要了解一下jvm的性能表现了,可以借助于java虚拟机自带的一些分析工具,主要有三个常用的命令. 1. ...

  3. Intelij IDEA创建SpringBoot项目 - 配置文件的解释

    springboot介绍 官网:spring.io Spring Boot is designed to get you up and running as quickly as possible, ...

  4. 【学习】SpringBoot之简介、特点、缺点、应用场景

    Spring Boot 的介绍 SpringBoot的目的在于创建和启动新的基于Spring框架的项目.Spring Boot 会选择最合适的Spring子项目和第三方开源库进行整合.大部分Sprin ...

  5. 网络1911、1912 C语言第1次作业批改总结

    一.评分规则 重点检查大家代码规范,变量名.大括号换行.缩进等发现不规范倒扣3分. 助教会进PTA查看大家代码的提交列表,发现不规范或抄袭,均扣分 每次作业完成后,至少邀请3个同学点评. 原作业地址: ...

  6. 数据库-MongoDb

    *本文总结下使用Mongodb遇到的问题: 1. 安装完MongoDb后先启动服务端,然后再启动客户端: 直接上图: 注意点:mongod.exe :是用来连接到mongo数据库服务器的,即服务器端. ...

  7. EMQTT测试--安装与测试 (windows)

    我下载的是windows版 安装 参考http://emqtt.com/docs/install.html 将下载的压缩包解压,我解压到了D盘 命令行窗口,cd到程序目录 控制台模式启动: .\bin ...

  8. 基于java config的springSecurity--session并发控制

    原作地址:http://blog.csdn.net/xiejx618/article/details/42892951 参考资料:spring-security-reference.pdf的Sessi ...

  9. linux使用du查看文件夹大小

    du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合为:du –sh -s不显示该目录下面的文件大小,只显示该目录的大小 -h以人类可读的方式显示. 比如显示work下面的Apache-tom ...

  10. bootstrap select2控件