python--正则表达式--字符串匹配原理

本文作者使用的python版本为: python 3.5.1


字符串是由一个个的字符连接而成的。正则表达式的匹配本质上就是在进行一个个的字符匹配。

字符匹配的方式是,导入一个字符,然后与匹配规则进行匹配,满足规则则匹配成功,否则匹配失败。

下面举例说明字符串匹配过程。

字符匹配

示例代码如下:

import re
pattern = '[abc]'
find_char = re.findall(pattern, r'abecdfgabecdfg')
print(find_char)

上述代码定义了一个匹配规则 pattern,该pattern包含三个字符abc,然后查找字符串abecdfgabecdfg中满足pattern的所有字符,即找出a、b、c。并将匹配到的字符打印出来。

底层匹配过程是这样的:

    先从字符串中录入第一个字符a,然后跟pattern匹配,发现a满足pattern,所以a匹配成功,返回a。

    再从字符串中录入第二个字符b,然后跟pattern匹配,发现b满足pattern,所以b匹配成功,返回b。

    再从字符串中录入第三个字符e,然后跟pattern匹配,发现e不满足pattern,所以e匹配失败。

    依此类推直到完成整个字符串的匹配。

匹配的结果如下:

['a', 'b', 'c', 'a', 'b', 'c']

上面介绍了字符匹配的原理,这是正则表达式的核心,所有其他更加复杂的匹配情况,都是由字符匹配组合出来的。

下面介绍一下匹配一个单词的情况。感受下字符匹配如何演化成为单词匹配。


单词匹配

示例代码如下:

import re
pattern = 'abc'
str = 'abeabcdss'
find_words = re.findall(pattern, str)
print(find_words)

该例的功能是:从字符串str中匹配出所有的单词abc。

底层匹配过程是这样的: 

    初始情况:pattern的第一个字符a成为当前待匹配字符。

    先从字符串中录入第一个字符a,然后跟当前待匹配字符匹配,由于待匹配字符时a,因此匹配通过,缓存a到匹配结果中,并设置字符b成为待匹配字符。

    再从字符串中录入第二个字符b,然后跟当前待匹配字符匹配,由于待匹配字符时b,因此匹配通过,缓存b到匹配结果中,并设置字符c成为待匹配字符。此时缓存区中的值为ab。

    再从字符串中录入第三个字符e,然后跟当前待匹配字符匹配,由于待匹配字符时c,因此匹配失败,情况缓存区,并设置字符a成为待匹配字符。

    再从字符串录入第四个字符a,匹配成功。

    再从字符串录入第五个字符b,匹配成功。

    再从字符串录入第六个字符c,匹配成功。此时发现已经到了pattern末尾,则pattern匹配成功,返回匹配结果,清空缓存区。

    继续录入字符进行pattern的第二次匹配。

匹配结果如下:

['abc']

从例子中可以看出,单词匹配其实是将单词分割成为了多个字符,然后按顺序进行字符匹配,当所有字符匹配成功时,单词匹配成功。



欢迎批评指正!



猜你喜欢

转载自blog.csdn.net/iampsz/article/details/80383950
今日推荐