对字符串操作的逻辑公式。
| 语法规则 |
---|
. | 匹配除\n之外的字符 |
\ | 转义符,使用r |
[…] | 字符集,任意字符,可逐个列出,可范围 |
[^…] | 取反 |
| 预定义字符集,可写在[…]中 |
---|
\d | [0-9] |
\D | [^\d] |
\s | 空白字符,\t \r \n \f \v |
\S | 非空白字符[^\s] |
\w | 单词字符[A-Z a-z 0-9] |
\W | 非单词字符[^\w] |
| 数量词 |
---|
* | 大于等于零次 |
+ | 大于等于一次 |
? | 0或1 |
{m,n} | m到n次 |
*? | 非贪婪模式 |
| 边界匹配 |
---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
\A | 仅匹配开头 |
\Z | 仅匹配结尾 |
\b | 匹配\w和\W之间 |
\B | [^\b] |
| 逻辑,分组 |
---|
| | 左右分别匹配,或 |
(…) | 分组,编号+1 |
(?P<name>…) | 分组指定别名 |
\<name> | 引用编号为number的分组匹配 |
(?P=name) | 引用别名<name> |
| 特殊构造 |
---|
(?:…) | 不分组版 |
(?#…) | 注释 |
(?=…) | 之后匹配 |
(?!..) | 之后不匹配 |
(?<=…) | 之前匹配 |
(?<!..) | 之前不匹配 |
(?(id/name) yes|no) | 如果id name匹配到,匹配yes |
#贪婪模式:匹配到尽可能多的字符。abbbc→ab→abbb
非贪婪模式:abbbc→ab?→a
#反斜杠:\\ = r’’
Python.re
使用pattern匹配,通过compile编译成pattern对象,匹配。
re.compile(string [,flag])
flag:
re.I:忽略大小写
re.M:多行模式
re.S:点任意匹配,会匹配到换行符
re.L:使用预定字符类
re.U:使用Unicode
re.X:多行,忽略空白,加入注释
re.match(pattern)
从头开始,匹配完成时停止。
pattern = re.compile(r'hello')
result = re.match(pattern, 'hello world!')
if result:
print(result.group())
else:
print('fail')
re.start()
re.end()
re.span([group]) #返回(start(),end())
re.expand(r'\2 \1\3') #world hello!
#取出含‘o’的单词
string='together,we did not do it'
print(re.findall('\w*o\w*',string,re.I))
#将符号,字母删除
string='你在干a啥?'
print(re.sub('[,.、a-zA-Z0-9())','',string)