Re——正则表达式_匹配项(pattern) and 模式(flag)

匹配项(pattern):

1、 (?=…) —> 如果匹配……匹配next,但不使用任何字符串。这称为前向断言。

eg: >>> r = re.search('def(?=abc)','defabc')
	>>> r.group()
	'def'

/* 注: 这个也是条件匹配只不过条件紧挨着要匹配字符串的后面!


2、(?!..) —> 如果匹配……不匹配。这是一个否定的前向断言。

eg: >>> r = re.search('def(?!abc)','defacc')
	>>> r.group()
	'def'

2、(pattern_1)?(pattern_2)?(?(pattern_name(1、2……))yes|no) —> 例如表示如果pattern_name=pattern_1 则当pattern_1在子字符串
出现时则(?(pattern_name)yes|no)去查找字符串后面出现的yes,
否则则去查找字符串后面出现的no

eg: >>> re.search('(12)? (?(1)12|)','12 12')
		<_sre.SRE_Match object; span=(0, 5), match='12 12'>

3、 (?<=…) —> 如果字符串中的当前位置前面有一个匹配的for…在当前位置结束。

eg: >>> m = re.search('(?<=abc)def', 'abcdef')
			>>> m.group(0)
			'def'

4、(?<!..) —> 如果字符串中的当前位置前面没有匹配for…则匹配。

eg: >>> m = re.search('(?!<abc)def','assdef')
	>>> m.group()
	'def'

5、 (?#…) —> 评论;括号中的内容将被忽略。


6、 正则表达式中r’‘表示(字符) eg: \n 不是转义字符回车,从而更好地匹配,如果不用r’'则不使用转义字符时使用//(字符)
eg: ‘\\w’ —> 匹配一个字符

eg: >>> r = re.search('(\w+\b)+','foo.')
	>>> type(r)
	<class 'NoneType'>
	------分割符------
	>>> r = re.search(r'(\w+\b)+','foo.')
	>>> r.group()
	'foo'
	------分割符------
	>>> r = re.search('(\w+\\b)+','foo.')
	>>> r.group()
	'foo'

/* 注: 如果/(字符)在系统中无转义符意义,则不用\(字符)
eg: \w 和 \w 在正则表达式中匹配的效果一样,而\b 和 \b 不同。
如下为转义字符:
\a \b \f \n
\r \t \u \U
\v \x \


7、\number —> 匹配叠词

eg: >>> re.search(r'(\w+)\1','thethe')
	<_sre.SRE_Match object; span=(0, 6), match='thethe'>

8、\b —> 匹配空字符串,但仅在单词的开头或结尾。单词被定义为Unicode字母数字或下划线字符的序列,因此单词的结尾由空格或非字母数字、非下划线Unicode字符表示。


9、\B —> 匹配空字符串,但仅当它不在单词的开头或结尾时才匹配。


10、\d —> 匹配任何Unicode十进制数字(即Unicode字符类别[Nd]中的任何字符)。


11、 \D —> 匹配任何非Unicode十进制数字的字符。这是\d的反义词。


12、 \s —> 匹配Unicode空白字符(其中包括[\t\n\r\f\v],以及许多其他字符,例如许多语言中排版规则强制要求的不间断空格)。如果使用ASCII标志,则只匹配[\t\n\r\f\v]。


13、\S —> 匹配任何非Unicode空白字符。这是\s的反义词。


14、 \w —> 匹配Unicode单词字符;这包括任何语言中可以作为单词一部分的大多数字符,以及数字和下划线。如果使用ASCII标志,则只匹配[a- za - z0 -9_]


15、\W —> 匹配任何非Unicode单词字符。这是\w的反义词。
如果使用ASCII标志,它就相当于[^a- za - z0 -9_]


16、\A —> 仅在字符串的开头匹配。


17、\Z —> 仅在字符串末尾匹配。


模式(flag):

1、 re.A(只匹配ascii)
—> 使\w、\w、\b、\b、\d、\d、\s和\s只执行ascii匹配,而不执行完整的Unicode匹配。这只对Unicode模式有意义,而对字节模式则忽略不计。


2、 re.I(忽略字母大小写)


3、 re.DEBUG
—> 显示有关已编译表达式的调试信息。


4、 re.S/re.DOTALL
—> 使’.'特殊字符匹配任何字符,包括换行;没有这个flag,
'.'将匹配除换行以外的任何内容。


5、 re.L(语言环境相关)


6、 re.M/MULTILINE(多行)
—> 当指定时,模式字符’^'匹配字符串的开头和每行的开头(紧接每行换行之后);模式字符“$”匹配字符串的末尾和每行的末尾(紧接在每行换行之前)。


7、 re.X(详细)
—> 可视化操作,不是太重要,具体件PythonDocs


————2020年4月12日 XXX

posted @ 2020-04-12 22:04  souldom  阅读(1107)  评论(0编辑  收藏  举报