之前写了一篇有关正則表達式的文章.主要是介绍了正則表達式中通配符 转义字符 字符集 选择符和子模式 可选项和反复子模式 字符串的開始和结尾 ,有兴趣的能够查看博客内容. 此文章主要内容将要介绍re中的贪心和非贪心算法: 贪心: 使用 .* 匹配字符串 当中标点 . 表示通配符,能够用来匹配除换行符之外的随意符号.* 为反复子模式,同意模式反复0次或者多次. 贪心算法将会依照尽可能大的原则去匹配字符串. 非贪心:  使用 .*? 匹配字符串 当中标点 . 表示通配符,能够用来匹配除换行符之外的随意…
Python的正则表达式默认是“贪心匹配”,即在有第二义的情况下,尽可能匹配最长的字符串,在正则表达式的花括号后面跟上问号,可以变为非贪心模式 >>> >>> haRegex=re.compile(r'(ha){3,5}')>>> m=haRegex.search('hahahahahaha')>>> print(m.group())hahahahaha>>> 上述输出5个ha,是贪心匹配 >>>…
在使用正则表达式时,匹配算法存在贪婪模式和非贪婪模式两种模式,在<第11.8节 Pytho正则表达式的重复匹配模式及元字符"?". "*". "+"功能介绍>中的重复匹配模式就是贪婪模式. 什么是贪婪模式呢?就是匹配的时候,在整体匹配的情况下最大可能多的匹配最多的字符.非贪婪模式就是只要在字符串从左往右匹配模式串成功即停止匹配.如模式串"<.*>" 在匹配 字符串'<a> b <c&g…
import re st = 'asdfasxxixxdafqewxxlovexxsadawexxyouxxas' # . #点匹配除换行符外的任意字符 a0 = re.findall('xx.',st) #print(a0) #['xxi', 'xxd', 'xxl', 'xxs', 'xxy', 'xxa'] a1 = re.findall('xx..',st) #print(a1) #['xxix', 'xxlo', 'xxsa', 'xxyo', 'xxas'] # * #星匹配前面的一…
正则表达式 - 教程 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"). 正则表达式使用单个字符串来描述.匹配一系列匹配某个句法规则的字符串. 正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感.只要认真阅读本教程,加上应用的时候进行一定的参考,掌握正则表达式不是问题. 许多程序设计语言都支持利用正则表达式进行字符串操作. 以下实例从字符串 str 中找出…
在学习re.split函数的处理过程中,发现执行如下语句及返回与老猿预想的不一致: >>> re.split('\W*','Hello,world') ['', 'H', 'e', 'l', 'l', 'o', '', 'w', 'o', 'r', 'l', 'd', ''] 而老猿期望的是['', 'Hello', '', 'world', ''],结果差异很大. 我们再看使用组模式匹配的结果: >>> re.split('(\W*)','Hello,world')…
在才开始学习正则表达式处理时,老猿对正则表达式:re.match(r"(-)+", "a1b2c3") 返回的匹配结果为"c3"没有理解,学习了贪婪模式的处理之后才明白,因为"+"的匹配是贪婪的,在匹配到结果后并不会停止,会继续匹配,直到匹配不到时再回退到上一个匹配位置作为匹配结果,因此"a1b2c3")匹配(-)时,先后匹配到"a1"."b2"."c3&q…
在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法.在绝大多数项目中,在算法中如果一个线程的挂起没有导致其它的线程挂起,我们就说这个算法是非阻塞的. 为了更好的理解阻塞算法和非阻塞算法之间的区别,我会先讲解阻塞算法然后再讲解非阻塞算法. 阻塞并发算法 一个阻塞并发算法一般分下面两步: 执行线程请求的操作 阻塞线程直到可以安全地执行操作 很多算法和并发数据结构都是阻塞的.例如,java.util.concurrent.BlockingQueue的不同实现都是阻塞数据结…
非阻塞算法(non-blocking algorithms)定义        所谓非阻塞算法是相对于锁机制而言的,是指:一个线程的失败或挂起不应该引起另一个线程的失败或挂起的一种算法.一般是利用硬件层面支持的原子化操作指令来取代锁的,比如CAS(compare and swap),从而保证共享数据在并发访问下的数据一致性.   由AtomicInteger的线程安全机制说起   AtomicInteger内部是如何保证线程同步的呢?我们先看AtomicInteger内部的一个典型的方法:  …
以下内容转自http://ifeve.com/non-blocking-algorithms/: 在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法.在绝大多数项目中,在算法中如果一个线程的挂起没有导致其它的线程挂起,我们就说这个算法是非阻塞的. 为了更好的理解阻塞算法和非阻塞算法之间的区别,我会先讲解阻塞算法然后再讲解非阻塞算法. 阻塞并发算法 一个阻塞并发算法一般分下面两步: 执行线程请求的操作 阻塞线程直到可以安全地执行操作 很多算法和并发数据结构都是阻塞的.…