彩世界平台-彩世界时时app-彩世界开奖app苹果下载

热门关键词: 彩世界平台,彩世界时时app,彩世界开奖app苹果下载

您的位置:彩世界平台 > 彩世界平台 > Python re(正则表达式)模块

Python re(正则表达式)模块

发布时间:2019-09-04 22:18编辑:彩世界平台浏览(82)

    re模块

    Python正则表达式模块(re模块),python正则表达式

      Python是我接触到的第一门编程语言,虽然它足够简单,但是对于当时刚刚接触编程语言的我来说还是有些难度的,于是只是了解了一些Python的基本语法,稍微深入一点的地方都没怎么了解。不过,到现在为止,我已经接触了这门编程语言一年了,期间把Python各种特性,各种包都看过,了解过。不过对于正则表达式这块仍然一知半解,加上前段时间帮助聪哥整理了<深入Python3>的中文维护版,凑上这个国庆假期,于是来简单的聊一聊这个正则表达式模块--re。

      首先是字符串中字符的替换问题,如果使用原生的Python方法,一般就是采用 replace 方法,下面我们采用re.sub方法同它进行比较。

    第一个案例:我们的目标是把ROAD替换成RD.

    彩世界时时app 1

      似乎replace方法工作的不错阿,完成了我给定的任务。如果是下面这个例子呢?

    彩世界时时app 2

      这里很明显已经出现了问题,因为这个字符串中含有BROAD,其中也有ROAD四个字符,但是我们的目标并没有要求替换它。这里它也被替换成了BRD. ,这已经足以说明replace方法的局限性。当然,如果我们设计得当,这个方法也能用。

    彩世界时时app 3

      使用切片,我们也能做到这一点,仅仅把最后面的四个字符替换。不过,这种算法也有局限性,如果我们要将STREET 替换为ST. ,我们是不是应该保留最后面的六个字符?这样,每次替换都要修改代码,并且很容易造成错误,对于调试来说很麻烦。

      那么让我们来试一下re.sub方法。

    彩世界时时app 4

      注意第一个参数,‘ROAD$’,其中美元符代表了字符串的结尾,也就是说匹配结尾的ROAD字符。同样的 ,^ 代表字符串的开头。我很快发现, 有时候ROAD不一定在字符串的结尾,比如: s = '100 BROAD ROAD APT.3',此时,上面的方法就不适用了,没关系,我们还有b。

    彩世界时时app 5

      是不是很神奇?b在左侧意味着左侧是个空格,在右侧意味着右侧是个空格,因此两侧彩世界时时app,b就是说,ROAD是一个独立的单词。也就是把独立的ROAD换成RD.,这和我们的目标相同。

     

    第二个案例:罗马数字的匹配

      在罗马数字中,用七个字母组合来表示数字。

      I = 1

      V = 5

      X = 10

      L = 50

      C = 100

    彩世界平台,  D = 500

      M = 1000

    下面是几个通常的规则来构成罗马数字:

      大部分时候用字符相叠加来表示数字。I是1, II是2, III是3。VI是6(挨个看来,是“5 和 1”的组合),VII是7,VIII是8。

      含有10的字符(I,X,C和M)最多可以重复出现三个。为了表示4,必须用同一位数的下一个更大的数字5来减去一。不能用IIII来表示4,而应该是IV(意思是比5小1)。40写做XL(比50小10),41写做XLI,42写做XLII,43写做XLIII,44写做XLIV(比50小10并且比5小1)。

      有些时候表示方法恰恰相反。为了表示一个中间的数字,需要从一个最终的值来减。比如:9需要从10来减:8是VIII,但9确是IX(比10小1),并不是VIII(I字符不能重复4次)。90是XC,900是CM。

      表示5的字符不能在一个数字中重复出现。10只能用X表示,不能用VV表示。100只能用C表示,而不是LL。

      罗马数字是从左到右来计算,因此字符的顺序非常重要。DC表示600,而CD完全是另一个数字400(比500小100)。CI是101,IC不是一个罗马数字(因为你不能从100减1,你只能写成XCIX,表示比100小10,且比10小1)。

    对于千位数的匹配:

    彩世界时时app 6

      我们设定匹配模式是三个M,其中‘?’代表了这个参数是可选的,即三个可选的M参数。

      第一次匹配M时,从^(字符串开头)开始匹配,匹配到一个M,另外两个由于是可选的,因此跳过,然后匹配到$(字符串结尾),匹配完成,返回一个匹配对象。第二,第三次匹配军成功。第四次匹配时,由于最多只能匹配上三个M,而给了四个M,因此在匹配完三个M时寻找$时,寻找不到,因此匹配失败,返回None。

      值得注意的时,因为三个参数都是可选的,因此空字符串也能匹配上。

    对于百位数的匹配:

    100 = C

    ``200 = CC

    ``300 = CCC

    ``400 = CD

    ``500 = D

    ``600 = DC

    ``700 = DCC

    ``800 = DCCC

    ``900 = CM

    因此有以下四种匹配模式:

    CM

    ``CD

      可能有0到3个字符C(0个表示千位为0)。

      D紧跟在0到3个字符C的后面。

    其中后两种可以合并为一种:

      一个可选的D,后面跟着0到3个字符C。

    彩世界时时app 7

      此时,匹配模式中即包含千位,也包含百位。 ‘|’就是逻辑运算中或的意思,当出现几种情况并行时使用,当其中一个条件满足时,就停止执行后面的条件。

      同样可以发现,空字符也是可以被匹配上的。

    同理,我们分析了十位和个位的法则,也可以匹配上。

    正则表达式非常强大,但它也并不是解决每一个问题的正确答案。你需要更多的了解来判断哪些情况适合使用正则表达式。某些时候它可以解决你的问题,某些时候它可能带来更多的问题。

    预留问题:

    1.“115.28.66.99[port=8080]”,这个字符串表示IP地址为115.28.66.99的服务器的8080端口是打开的,请用程序解析此字符串,然后打印出“IP地址为***的服务器的***端口是打开的”。

    2.“115.28.66.99[port=21,type=ftp]”,这个字符串表示IP地址为115.28.66.99的服务器的21端口提供的是ftp服务,其中如果“,type=ftp”部分被省略,则默认为http服务。请用程序解析此字符串,然后打印出“IP地址为***的服务器的***端口提供的服务为***”

     

    Python是我接触到的第一门编程语言,虽然它足够简单,但是对于当时刚刚接触编程语言的...

    Python可以通过re模块来实现使用正则表达式匹配字符串,我们可以通过查看~/installs/python/lib/python2.7/re.py 文件查看re提供的方法,主要使用的下面的几个接口:

    l def match(pattern, string, flags=0):

    """Try toapply the pattern at the start of the string, returning

    a match object, or None ifno match was found."""

    return _compile(pattern,flags).match(string)

    re.match从字符串的开始匹配一个模式,第一个参数是正则表达式,第二个字符串是要匹配的字符串,第三个参数是标志位,缺省为0;如果可以查找到则返回一个match对象,否则返回None。

    l def search(pattern, string, flags=0):

    """Scan through string looking for a match to thepattern, returning

    amatch object, or None if no match was found."""

    return_compile(pattern, flags).search(string)

    re.search函数在字符串内查找模式,直到找到第一个就退出,查找不到返回None,其参数和re.match一致。而与match的区别在于,match只是匹配字符串的开始,而search匹配整个字符串。

    l def findall(pattern, string, flags=0):

    """Return a list of all non-overlapping matches in thestring.

    If one or more groups are present in the pattern, return a

    list of groups; this will be a list of tuples if the pattern

    本文由彩世界平台发布于彩世界平台,转载请注明出处:Python re(正则表达式)模块

    关键词:

上一篇:Python快速入门(4)排序、字典、文件

下一篇:没有了