例子:
import re
String = "hello python, you are a son of Python, hello world, ok"
print("# 01 findall()函数找出所有匹配的例子")
string1 = re.findall(r"hello", String)
print(string1)
print("# 02 函数从第一个字符串开始找,并且使用group()和span()查看")
string2 = re.match(r"hello", String)
string3 = re.match(r"python", String)
string4 = string2.group()
string5 = string2.span()
print(string2)
print(string3)
print(string4)
print(string5)
print("# 03 search()函数从整个字符串开始匹配,只返回一个,并且使用group()和span()查看")
string6 = re.search(r"hello", String)
string7 = string6.group()
string8 = string6.span()
print(string6)
print(string7)
print(string8)
运行结果:
# 01 findall()函数找出所有匹配的例子
['hello', 'hello']
# 02 函数从第一个字符串开始找,并且使用group()和span()查看
<_sre.SRE_Match object; span=(0, 5), match='hello'>
None
hello
(0, 5)
# 03 search()函数从整个字符串开始匹配,只返回一个,并且使用group()和span()查看
<_sre.SRE_Match object; span=(0, 5), match='hello'>
hello
(0, 5)
字符 | 功能 |
---|---|
. | 任意匹配一个字符("\n"除外) |
[abc] | 匹配(重复)里面的任意一个字符 |
[^abc] | 匹配(重复)非里面的任意一个字符 |
* | 匹配**>=0个重复的在号之前的一个字符*。 比如abc* ,可以匹配到ab abc abccc abccccc |
+ | 匹配**>=1个重复的在+号之前的一个字符**。 比如ab* 可以匹配到ab abbbb |
? | 一般用于**.*?模式,表示非贪婪** |
\d (data) | 匹配任意一个数字 |
\D | 匹配任意一个非数字 |
\s (space) | 匹配任意一个空格 |
\S | 匹配任意一个非空格 |
\w (word) | 匹配任意一个字符(字母,数字,下划线) |
\W | 匹配任意一个非字符 |
{m} | 匹配m个大括号之前的字符 |
{m, n} | 匹配num个大括号之前的字符 (n <= num <= m). |
^ | 从开始行开始匹配 |
$ | 从末端开始匹配 |
| | 或运算符,匹配符号前或后的字符 |
(ab) | (ab) 字符集,匹配与 ab 完全相等的字符串. |
\b (borderland) | 匹配一个单词的边界 |
\B | 匹配一个单词的非边界 (数字字母下划线和其他字符的交界处认为是单词边界) |
import re
a = "hello everyone"
print(re.findall(r".", a))
print(re.findall(r"h.", a))
结果:
['h', 'e', 'l', 'l', 'o', ' ', 'e', 'v', 'e', 'r', 'y', 'o', 'n', 'e']
['he']
import re
a = "hello everyone"
print(re.findall(r"[evy]", a))
结果:
['e', 'e', 'v', 'e', 'y', 'e']
import re
a = "hello everyone"
print(re.findall(r"[^evy]", a))
结果:
['h', 'l', 'l', 'o', ' ', 'r', 'o', 'n']
import re
a = "abbsdfaaaddddab"
print(re.findall(r"ab*", a))
结果:
['abb', 'a', 'a', 'a', 'ab']
其实变动的一直是b(0次,多次),而它之前的都没有变动
import re
a = "abbsdfaaaddddab"
print(re.findall(r"ab+", a))
结果:
['abb', 'ab']
+号相比于*号,b虽然也在变动,但是至少保持了b至少有一个
import re
a = "big_mouse15468713_little"
print(re.findall(r"\d", a))
print(re.findall(r"\D", a))
结果:
['1', '5', '4', '6', '8', '7', '1', '3']
['b', 'i', 'g', '_', 'm', 'o', 'u', 's', 'e', '_', 'l', 'i', 't', 't', 'l', 'e']
import re
a = "big mouse15468713 little"
print(re.findall(r"\s", a))
print(re.findall(r"\S", a))
结果:
[' ', ' ', ' ', ' ']
['b', 'i', 'g', 'm', 'o', 'u', 's', 'e', '1', '5', '4', '6', '8', '7', '1', '3', 'l', 'i', 't', 't', 'l', 'e']
import re
a = "big__ +++ mou713 *** __lie"
print(re.findall(r"\w", a))
print(re.findall(r"\W", a))
结果:
['b', 'i', 'g', '_', '_', 'm', 'o', 'u', '7', '1', '3', '_', '_', 'l', 'i', 'e']
[' ', '+', '+', '+', ' ', ' ', ' ', ' ', '*', '*', '*', ' ']
import re
a = "aaassscns77777asdcssss"
print(re.findall(r"as{3}", a))
print(re.findall(r"s7{2,7}", a))
结果:
['asss']
['s77777']
import re
a = "avbibfvxchfvkdnvs"
# 注意这里没有加 星号*
print(re.findall(r"^a.", a))
print(re.findall(r".s$", a))
print(re.findall(r"^a.s$", a))
# 注意这里加了 星号*
print(re.findall(r"^a.*", a))
print(re.findall(r".*s$", a))
print(re.findall(r"^a.s$", a))
结果:
['av']
['vs']
[]
['avbibfvxchfvkdnvs']
['avbibfvxchfvkdnvs']
[]
import re
a = "afvnlxczxjkchs"
c = re.findall(r"x|f",