python-正则
python的正则还是比较简单的,但是有一个恶心的是re模块里的sub方法就是替换,而写过c写过php的人都知道sub是截节的方法。 下面是一些例子:# 标题 content = re.sub(r"(?m)^=(.+?)=\s",r"<h2>\1</h2>",content) # 代码块 content = re.sub(r"(?s):::\s+(.+?):::\s",self.escape_html,content) # 简单列表 content = re.sub(r"(?m)^\*\s(.+?)\s+$",r"<ul><li>\1</li></ul>",content) content = re.sub(r"\<\/ul\>\s*\<ul\>",r"",content)
- 表达示字符串一定要申明为r。
- (?x)是python正则的模式语法
- sub是支持回调函数的,默认为传递一个match对象,而在match对象中的group(x)方法,获得组。
关于零宽断言的尝试
对于零宽断言有多难学,很多人痛苦,我到目前也在痛苦,可是有两个要点要记住,- “零宽”!那么我们就把它想像成一把尖刀,因为锋口就是零宽的。
- 断言的位置,断言作为一个条件应用于正则其它部份的参照。例如:"ab",a是断言,那么就是a断言出现在其它正则b之前作为参照位子进行剩余匹配。
>>> s = "abcdefg" >>> import re # |abcdefg / (预测) abc存在位置,匹配从abc的 开始处 到\w+ 结束 的字符。 >>> r = re.sub(r"(?=abc)\w+",r"xxx",s) >>> r 'xxx' # abc|defg / (回顾) abc存在位置,匹配从abc的 之后处 到\w+ 结束 的字符。 >>> r = re.sub(r"(?<=abc)\w+",r"xxx",s) >>> r 'abcxxx' # |abcdefg / (预测) abc存在位置,匹配从abc的 开始处 到\w+ 开始处 的字符 >>> r = re.sub(r"\w+(?=abc)",r"xxx",s) >>> r 'abcdefg' # abc|defg / (回顾) abc存在位置,匹配从abc的 之后处 到\w+ 开始处 的字符 >>> r = re.sub(r"\w+(?<=abc)",r"xxx",s) >>> r 'xxxdefg' # a|bcdefg / (预测) bc存在位置,匹配bc的 开始外 到\w+ 结束 的字符。 >>> r = re.sub(r"(?=bc)\w+",r"xxx",s) >>> r 'axxx' # abc|defg / (回顾) bc存在位置,匹配bc的 之后处 到\w+ 结束 的字符。 >>> r = re.sub(r"(?<=bc)\w+",r"xxx",s) >>> r 'abcxxx' # a|bcdefg / (预测) bc存在位置,匹配bc的 开始外 到\w+ 开始 的字符。 >>> r = re.sub(r"\w+(?=bc)",r"xxx",s) >>> r 'xxxbcdefg' # abc|defg / (回顾) bc存在位置,匹配bc的 之后处 到\w+ 开始 的字符。 >>> r = re.sub(r"\w+(?<=bc)",r"xxx",s) >>> r 'xxxdefg'你明白了么?请注意断言本身、断言位置、剩余匹配,你行滴。 负向 关于负向零宽断言,就不想多说了,因为除了断言本身条件变化,断言位置和其它条件是一样的。