摘抄自网上,测试笔记
jupyter 5.6.0 + python 3.7.0
在python中,
字符串前的 r 表示 raw,即这是一个raw string。
raw string的意思是,此字符串中的 \n \b \r … 等转义符号,就不进行转义了
re.match(pattern, string[, flags])
这个方法将会从 string(我们要匹配的字符串)的开头开始,尝试匹配 pattern,一直向后匹配,如果遇到无法匹配的字符,立即返回 None,如果匹配未结束已经到达 string 的末尾,也会返回 None。两个结果均表示匹配失败,否则匹配 pattern 成功,同时匹配终止,不再对 string 向后匹配。
import re
# 将正则表达式编译成Pattern对象,注意hello前面的r的意思是“原生字符串”
pattern = re.compile(r'hello')
# 使用re.match匹配文本,获得匹配结果,无法匹配时将返回None
result1 = re.match(pattern,'hello')
result1.group()
'hello'
result2 = re.match(pattern,'helloo abc!')
result2.group()
'hello'
result3 = re.match(pattern,'helo abc!') # 无法匹配成功,返回None,没有 group() 属性
result3.group()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-23-34b004ad0e7f> in <module>()
1 result3 = re.match(pattern,'helo abc!') # 无法匹配成功,返回None,没有 group() 属性
----> 2 result3.group()
AttributeError: 'NoneType' object has no attribute 'group'
if result3:
print(result3.group())
else:
print('匹配失败')
匹配失败
Match对象是一次匹配的结果,
包含了很多关于此次匹配的信息,可以使用 Match 提供的可读属性或方法来获取这些信息。
属性:
-
string: 匹配时使用的文本。
-
re: 匹配时使用的 Pattern 对象。
-
pos: 文本中正则表达式开始搜索的索引。值与 Pattern.match() 和 Pattern.seach() 方法的同名参数相同。
-
endpos: 文本中正则表达式结束搜索的索引。值与 Pattern.match() 和 Pattern.seach() 方法的同名参数相同。
-
lastindex: 最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为 None。
-
lastgroup: 最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为 None。
方法:
-
group([group1, …]):
获得一个或多个分组截获的字符串;
指定多个参数时将以元组形式返回。
group1 可以使用编号也可以使用别名;
编号 0 代表整个匹配的子串;
不填写参数时,返回 group(0);
没有截获字符串的组返回 None;
截获了多次的组返回最后一次截获的子串。 -
groups([default]):
以元组形式返回全部分组截获的字符串;
相当于调用 group(1,2,…last)
default 表示没有截获字符串的组以这个值替代,默认为 None。 -
groupdict([default]):
返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。
default 含义同上。 -
start([group]):
返回指定的组截获的子串在 string 中的起始索引(子串第一个字符的索引)。
group 默认值为 0。 -
end([group]):
返回指定的组截获的子串在 string 中的结束索引(子串最后一个字符的索引+1)。
group 默认值为 0。 -
span([group]):
返回 (start(group), end(group))。 -
expand(template):
将匹配到的分组代入 template 中然后返回。
template 中可以使用 \id 或 \g;
\g 引用分组,但不能使用编号 0。
\id 与 \g 是等价的;
但 \10 将被认为是第 10 个分组,如果你想表达 \1 之后是字符’0’,只能使用 \g0。
# 匹配如下内容:单词+空格+单词+任意字符
m = re.match(r'(\w+) (\w+)(?P<sign>.*)', 'hello world!')
print("m.string:", m.string)
print