Python正则表达式--每日一点 检索和替换

简单的对上期的search和match进行一下简单补充,两者最大的区别在于match是从开始部分进行匹配,没有匹配到就返回空,而search是整句扫描进行匹配


好了,开始今天的内容

大家看下这段代码

    patter1 = '#.*$'  # 删除注释的正则表达式
    patter2 = '\D'  # 删除非数字的正则表达式
    source = "15527%051_13-2 #这是电话"
    print(source)
    result = re.sub(patter1, '', source)  # 把注解删掉
    print(result)
    result2 = re.sub(patter2, '', result) # 把非数字的删掉
    print(result2)
# 控制台打印出来的结果为:
#15527%051_13-2 #这是电话
#15527%051_13-2 
#15527051132

分析这个sub方法的参数问题

    '''
    下面有四个参数
    1 pattern 很明显是匹配规则
    2 repl是替换的字符串
    3 string 需要处理的字符串
    4 count是表示匹配后替换的个数,一般是0,表示把匹配到的全部给替换掉,一般不写
    5 这个是标志位,是否忽视大小写等等之类的
    # re.sub(pattern, repl, string, count=0 , flag=None)
    '''
    ```

## 在看下下面的代码

```python
    inputStr = "hello python,ni hao c,zai jian python"
    replaceStr = re.sub(r"hello (\w+),ni hao (\w+),zai jian \1", "PHP", inputStr)
    print(replaceStr)

    inputStr = "hello python,ni hao c,zai jian python"
    replaceStr = re.sub(r"hello (\w+),ni hao (\w+),zai jian \2", "PHP", inputStr)
    print(replaceStr)
    #打印结果
    #PHP
    #hello python,ni hao c,zai jian python




class="se-preview-section-delimiter">div>

为什么会产生这样的结果呢,我们逐一的分析下

  • 用 PHP来代替 hello (\w+),ni hao (\w+),zai jian \1匹配到的内容 ,当然全部匹配到了,所以返回PHP
    \1 表示取第一个分组匹配到的内容,也就是python这个字符串作为匹配格式,放到\1这个位置进行匹配,python刚好匹配到了python。如果换成\2的话就是,C匹配python,肯定匹配不成功,如果是这样的话就会返回原来的字符串,就如同第二个例子

使用函数来处理匹配

这里写代码片
> 为什么会产生这样的结果呢,我们逐一的分析下

- 用 PHP来代替 hello (\w+),ni hao (\w+),zai jian \1匹配到的内容 ,当然全部匹配到了,所以返回PHP
 \1 表示取第一个分组匹配到的内容,也就是python这个字符串作为匹配格式,放到\1这个位置进行匹配,python刚好匹配到了python。如果换成\2的话就是,C匹配python,肯定匹配不成功,如果是这样的话就会返回原来的字符串,就如同第二个例子


## 使用函数来处理匹配

```python
def pythonReSubDemo():

    # 源字符串
    inputStr = "hello 123 world 456"

    def _add111(matched):
        print("执行----")
        intStr = matched.group("number") #123
        intValue = int(intStr)
        addedValue = intValue + 111 #234
        addedValueStr = str(addedValue)
        return addedValueStr

    replacedStr = re.sub("(?P\d+)", _add111, inputStr)
    print("replacedStr=", replacedStr) #hello 234 world 567
    '''
        (?P\d+)这个是分组,然后在指定一个额外的别名,也就是number 在上面就有获取这个分组
    '''
    # 控制台打印的结果为
    #执行----
    #执行----
    #replacedStr= hello 234 world 567

从上面控制台打印的结果来看,_add111这个方法是执行了两次。
replacedStr = re.sub(“(?P\d+)”, _add111, inputStr)在这个匹配中对匹配的进行分组命名为number 每匹配到一次就执行 _add111这个方法,然后通过分组名来拿到指定的匹配值 return 返回后就进行替换了

你可能感兴趣的:(正则表达式)