正则
(?=...) 写在某个正则的后面,表示当后面是什么什么的时候,会去匹配,看例子
ex:
(?!...) 和前面这个正好相反,表示当后面的不是什么什么的时候,会去匹配
ex:
(?<=...) 这个用来判断一个寻找字符串的前面是什么的判定,比如 "(?=123)\d*" 这个用来寻找前面是123(不一定开头的),后面是一串数字的字符串
ex:
用编程语言的search来适用这个pattern
(?<!...) 这个和上面的那个正好相反,想要寻找一个字符串的时候,希望它的前面不是某一串特定的字符串。我们也可以想想,上面的是=,下面的是!,
可以想成==和!=,这个在编程语言中很常见吧。
ex:
用编程语言的replace来适用这个pattern
再者,re.compile()返回一个对象,这个对象有一个方法是sub,用来替换字符串,m.sub('linux','python and 123 all good'),说的是用"linux"去替换掉"python and 123 all good"字符串中前面不是"python"连续的三个数字字符串,找到"123",替换之
(?#...) 在编绎含有这个模式的表达式时,不需要考虑,仅仅当它一段注释
ex:
#http://docs.python.org/3/library/re.html
(?=...) 写在某个正则的后面,表示当后面是什么什么的时候,会去匹配,看例子
ex:
import re
m = re.compile('python(?=linux)')
pirnt(m.match('pythonlinux').group(0))
#python
print(m.match('pythonjavascript'))
#None
(?!...) 和前面这个正好相反,表示当后面的不是什么什么的时候,会去匹配
ex:
import re
m = re.compile('python(?!javascript)')
print(m.match('pythonlinux').group(0))
#python
print(m.match('pythonjavascript'))
#None
(?<=...) 这个用来判断一个寻找字符串的前面是什么的判定,比如 "(?=123)\d*" 这个用来寻找前面是123(不一定开头的),后面是一串数字的字符串
ex:
用编程语言的search来适用这个pattern
import re
m = re.search('(?<=python)\d\.\d','python3.3')
m.group(0)
#'3.3'
则会匹配python后面的3.3
(?<!...) 这个和上面的那个正好相反,想要寻找一个字符串的时候,希望它的前面不是某一串特定的字符串。我们也可以想想,上面的是=,下面的是!,
可以想成==和!=,这个在编程语言中很常见吧。
ex:
用编程语言的replace来适用这个pattern
import re
m = re.compile('(?<!python)\d{3}');
m.sub('linux','python and 123 all good')
#'python and linux all good'
首先编绎一个正则表达式,"(?<!python)\d{3}"表示前面不是"python"的三个字符串,可以用来匹配"linux123"或者"pdf456",只要前面不是"python",但是后面有三个数字字符串的就行
再者,re.compile()返回一个对象,这个对象有一个方法是sub,用来替换字符串,m.sub('linux','python and 123 all good'),说的是用"linux"去替换掉"python and 123 all good"字符串中前面不是"python"连续的三个数字字符串,找到"123",替换之
(?#...) 在编绎含有这个模式的表达式时,不需要考虑,仅仅当它一段注释
ex:
import re
m = re.compile('(?#linux)\w*')
list(m.match('python').group(0))
#['p', 'y', 't', 'h', 'o', 'n']
#http://docs.python.org/3/library/re.html