正则表达式:就是可以匹配文本片段的模式,也可以理解为一个类似字符串的公式,按照特定的模式进行匹配

1、通配符:

‘.’,可以匹配除了换行符的任意字符,至少也是至多能匹配一个字符,不能一个都不匹配,也不能匹配两个或两个以上。

因为点号能够匹配任意的单个字符,所以它就叫通配符

2、如果正则表达式中有一些特殊字符,比如逗号,引号,斜线等,这些在语言中本来就有特殊的意义,如果想让他们作为普通字符在正则表达式中,就用转义字符进行转义。

3、因为反斜线有着一些特殊的作用,那就是转义,它能够把一些不能直接插入到字符串的字符经过转化插入,比如回车符不能插入,但是\n却可以插入,我们都知道,\n就是回车。但是有的时候,在正则表达式中,如果要匹配反斜线的话,那么它就要对自己本身转义。要在正则表达式中获得单个反斜线常常要自己对自己转义。

但是总是对自己转义会很麻烦,比如匹配一串路径的时候。为了更加便捷一些,我们引用了原始字符串来作为正则表达式。在原始字符串中,不会把反斜线当做特殊字符,甚至说,在原始字符串中的每个字符都会与他的书写方式保持一致。原始字符串以r作为字符串的前缀。

理论上来说,原始字符串中可以放入任何字符,但是一个特例就是在字符串的末尾不能加入反斜线,这样python不知道这个字符串该不该结束,如果实在有在字符串尾部加入反斜线的需求的话,可以运用字符串的自动连接功能

>>> print r"xuran\\"
xuran\\
>>> print r"xuran\"
SyntaxError: EOL while scanning string literal
>>> print r"xuran" "\\"
xuran\
>>> 

4、如果在想匹配任意单个字符的基础上获得 更多的控制权,可以选择字符集。字符集是由一个中括号括起来的字符集。例如"[12]xuran",字符集可以匹配它包括的任意字符,1xuran,2xuran,在逻辑上来说,是一个或的关系。要注意的就是,一个字符集内不管有多少可选字符,但是最后只能匹配一个。
还有一种形式,就是匹配除了正则表达式中的字符的字符串,这种取反的操作在字符集开头处加^符号, 例如[^abc],表示匹配不含a,b,c之外的字符串。如果确实想匹配^符号,可以再字符集中转义。


5、选择符和子模式

选择符:|,看着像LINUX的管道符号。选择符在匹配确定字符串的时候很有用,而通配符和字符集,用于匹配可变的字符。比如要匹配ptyhon和pag,则写成“python|pag”.

子模式:在整个正则表达式字符串中用括号括起来的部分。

6、问号?前面的部分,表示可以匹配一次,或者没匹配到也可以

*号表示可以匹配0次或者多次

+号表示可以匹配1次或多次

{m,n}允许匹配m次---n次内的任意次数,包括m,n

7、如果只想在开头或者结尾寻找匹配模式的子字符串的话,在正则表达式中开头加入^或者末尾加入$,就可以再特定的位置匹配一个子字符串。

比如r"^http",那么这个表达式就会匹配以http开头的字符串

8、compile(),将正则表达式编译成对象,增加匹配速度

search(),在字符串中寻找第一个匹配模式的子字符串,如果找到返回true,否则返回none.

match(),在字符串开头匹配模式,成功返回TRUE,否则返回NONE.

split(),根据在字符串中的匹配项来分割字符串

findall(),列出字符串中,所有与模式匹配的项

sub(a,s),将字符串s中的所有的a的匹配项,用b替换

escape将字符串中所有的正则运算符转义

9、经过complie编译的正则表达式对象也可以引用re模块的方法。

10、如果想用match来匹配整个字符串,可以在结尾加上$,这样就会从头一直匹配到结尾

11、整个字符串可以根据匹配的情况分为几个组,每个组就是一个子模式,用圆括号括起来的部分。0号组是整个字符串

12、为了能够让自己写出的正则表达式其他人能看懂,可以再re函数中使用VERBOSE标志,来允许在正则表达式中添加空白,但是re会忽略他们,这纯粹是为了写正则表达式的注释方便


13、贪婪匹配和非贪婪匹配

(1)任何重复运算符(*,+)都会造成贪婪匹配,即匹配尽可能多的字符

(2)在重复运算符后加上?,就是非贪婪模式,即,尽可能少的匹配。+?匹配一次或者不匹配


关于贪婪模式匹配和非贪婪模式匹配,我有个很重要的理解:

对于贪婪模式,如果在一个字符串中,有几个符合模式的字字符串,但是匹配的时候会从第一个满足模式的子字符串的起点开始,一直贪婪匹配到最后一个满足模式的子字符串的终点,期间不会再识别那些能匹配模式的子字符串,因为是贪婪匹配,除了终点和起点之外,中间的元素都会被贪婪

而非贪婪模式,要在重复符号后面加上?,".*?"并不是匹配0次,那样就没有意义了,非贪婪模式的匹配,同样会匹配一个(0个)或多个字符,但是仅会在到达下一个匹配项之前的范围内进行匹配。这才是非贪婪匹配,以前总是把非贪婪匹配当成不匹配,或者匹配一个。。。。。。哎

正则表达式re模块的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. 如何在iOS中检测文本(字符串)语言?

    例如,给定以下字符串:我想检测每个声明的字符串中使用的语言.让我们假设已实现函数的签名是:如果没有检测到语言,则返回可选字符串.因此,适当的结果将是:有一个简单的方法来实现它吗?

  4. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  5. 在Xcode4中,你可以更改用于显示隐形字符的字符吗?

    我更喜欢VisualStudio显示隐形的方式……

  6. ios – NSURLErrorDomain代码-1002下载pdf

    我正在尝试缓存一个网页,然后我可以使用UIWebView显示该网页.我在另一个NSURLSessionDataTask的完成块内的for循环(尝试缓存6个网页)中有相关的NSURLSessionDataTask.当我跑步时,我不断收到此错误:Ayy下载错误,数据:响应:(空)错误:错误域=NSURLErrorDomain代码=-1002“操作无法完成.(NSURLErrorDomain错误-1

  7. ios – 应用程序商店描述特殊字符

    是不是可以在AppStore描述中使用像星星这样的特殊字符了?我得到这个错误:描述不得包含标记语言.说明不得包含以下字符:★提前致谢:)解决方法仍然允许一些unicode字符.以下字符已经过测试并仍然有效:◆√至于现在他们工作正常,但苹果可以随时再次改变条件.

  8. ios – 将数组中的字符转换为整数

    即使我搜索了文档,我似乎无法弄清楚如何做到这一点.我试图弄清楚如何将数组中索引处的字符转换为整数.例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:谢谢您的帮助!解决方法Swift并不容易在原始和类型表示之间进行转换.这是一个在此期间应该有所帮助的扩展:这使您可以非常接近您想要的:对于遇到此问题的任何工程师,请参阅rdar://17494834

  9. ios – 如何在Swift 3中使用正则表达式?

    解决方法我相信.当没有其他选项适用时,将使用.allZeros.因此,使用Swift3,您可以传递一个空的选项列表或省略options参数,因为它默认为无选项:要么请注意,在Swift3中,您不再使用error参数.它现在抛出.

  10. ios – lldb断点在类目标c中的所有方法

    如何使用lldb在ObjectiveC类中的所有方法上自动设置断点?

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部