python贪婪和非贪婪

  正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪则相反,总是尝试匹配尽可能少的字符。在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。
 
>>> s="This is a number 234-235-22-423"
>>> r=re.match(".+(\d+-\d+-\d+-\d+)",s)
>>> r.group(1)
'4-235-22-423'
>>> r=re.match(".+?(\d+-\d+-\d+-\d+)",s)
>>> r.group(1)
'234-235-22-423'
>>>

  

 正则表达式模式中使用到通配字,那它在从左到右的顺序求值时,会尽量“抓取”满足匹配最长字符串,在我们上面的例子里面,“.+”会从字符 串的启始处抓取满足模式的最长字符,其中包括我们想得到的第一个整型字段的中的大部分,“\d+”只需一位字符就可以匹配,所以它匹配了数字“4”,而“.+”则匹配了从字符串起始到这个第一位数字4之前的所有字符。
  解决方式:非贪婪操作符“?”,这个操作符可以用在"*","+","?"的后面,要求正则匹配的越少越好。
 
  下面这个例子仔细体会下
 
>>> re.match(r"aa(\d+)","aa2343ddd").group(1)
'2343'
>>> re.match(r"aa(\d+?)","aa2343ddd").group(1)
'2'
>>> re.match(r"aa(\d+)ddd","aa2343ddd").group(1)
'2343'
>>> re.match(r"aa(\d+?)ddd","aa2343ddd").group(1)
'2343'
>>>

  

header">([\s\S]+?)sep20
匹配任何包括换行空白字符等, 非贪婪模式
header">([\s\S]+)sep20
匹配任何包括换行空白字符等, 贪婪模式

除开某字符

void main() {

  RegExp re = RegExp('<((?!P|\/P).*?)>');
String xx = '12<P xx>a</P haha)>b<haha>c';
String yy = xx.replaceAll(re, '');
print(yy); }

匹配包括换行符在内的任意字符,以下为正确的正则表达式匹配规则: ([\s\S]*) 同时,也可以用“([\d\D]*)”“([\w\W]*)” 来表示。

在文本文件里, 这个表达式可以匹配所有的英文:[ -~]

这个表达式可以匹配所有的非英文(比如中文):  [^ -~]

下面这个换行可以了.

main(){
String a = '''
a
b
c
a
d
d
''';
RegExp xx = RegExp("b([^]*)a");
var aa = xx.allMatches(a).toList();
print(aa);
}

  

python基础:re模块匹配时贪婪和非贪婪模式的更多相关文章

  1. python基础——第三方模块

    python基础——第三方模块 在Python中,安装第三方模块,是通过包管理工具pip完成的.  如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了.  如果你正在使用Window ...

  2. python基础——使用模块

    python基础——使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env ...

  3. 二十五. Python基础(25)--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  4. python 基础之 模块

    Python 基础之模块 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 就是一个python文件中定义好了类和方法,实现了一些功能,可以被别的python文 ...

  5. python中贪婪与非贪婪

    Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符: 非贪婪则相反,总是尝试匹配尽可能少的字符. 在"*","?", ...

  6. python正则表达式贪婪与非贪婪模式

    之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意. 1.什么是正则表达式的贪婪与非贪婪匹配 如:String str="a ...

  7. 周末班:Python基础之模块

    什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写 ...

  8. python基础----常用模块

    一 time模块(时间模块)★★★★                                                      时间表现形式 在Python中,通常有这三种方式来表示时 ...

  9. python基础之模块二

    六 logging模块 6.1 函数式简单配置 import logging #导入模块 logging.debug('debug message') #调试消息 logging.debug('inf ...

随机推荐

  1. 调用run与调用start的区别

    调用start的结果 package TestException; public class test1 { public static void main(String[] args) { // 3 ...

  2. Notes for Neural Network Methods for Natural Language Processing

    什么是深度学习?   一种机器学习算法,based on [多层][非线性变换]的[神经网络]结构 优点:可以使用 低维 稠密 连续 的向量表示不同粒度的语言单元, 还可以使用循环.卷积.递归等神经网 ...

  3. 自动出借-python+selenium

    自动出借 import time from selenium import webdriver # import os #B username = " # 请替换成你的用户名 passwor ...

  4. 密码登录源码(jsp+java+数据库)

    jsp界面: <%@ page language="java" contentType="text/html; charset=utf-8" pageEn ...

  5. JS通过类名判断是否都必填

    //判断class='required' 是否都必填 function required() { var flag = true; $(".required").each(func ...

  6. OGeek CTR预估

    特征工程:将所有数据拼接到一起做特征,等到处理完,再按索引拆分数据 1.数据分析 查看标签分布:发现valid与testa.testb的分布相似,说明valid与testa的查询时间比较接近,作为验证 ...

  7. linux 释放内存及查看内存命令

    查看内存使用情况: free -m 清理内存: echo 1 > /proc/sys/vm/drop_caches 再次查看内存使用情况 free -m 查看内存条数命令: dmidecode  ...

  8. python爬虫-基础入门-爬取整个网站《2》

    python爬虫-基础入门-爬取整个网站<2> 描述: 开场白已在<python爬虫-基础入门-爬取整个网站<1>>中描述过了,这里不在描述,只附上 python3 ...

  9. Abp项目构建、swagger及代码生成器

    前段时间在学习abp,在配置swagger时踩了不少坑,特此整理一下,方便同行参考.幸运的是又发现了神奇的代码生成器,分享下亲身经验. 觉得此博客非常有用的朋友可以在右侧赞助打赏下,非常感谢大家支持. ...

  10. 内网渗透之如何玩转Meterpreter?(nc.exe)

    十.Meterpreter常用命令 1.基本命令(包含meterpreter和msf终端.ruby接口.目标shell交互的命令) background(进程隐藏至后台) sessions(查看已经成 ...