该正则表达式所示代码,基于python环境编写,但各语言正则表达式语法基本相同

一、Python中re模块中的match方法:

1.1 单字符匹配
字符 单字符匹配
. 匹配任意字符(除了\n)
[…] 匹配字符集
\d \D 匹配任意数字,匹配任意非数字
\s \S 匹配空白字符,匹配非空白字符
\w \W 匹配单词字符[a-zA-Z0-9],匹配任意非单词字符
举例:
匹配大括号中及其有一个字符的字符串:{a}
{.}
匹配大括号中及其中有字符集 z1s 的任意一个字符:{z} 
{[z1s]}
匹配大括号中及其中有字符集 a-zA-Z0-9的任意一个字符:{n} 
{[a-zA-Z0-9]},又可写成:{[\w]}
匹配中括号中及该中括号内存在一个单词字符:[a]
\[[\w]\],需要加转义符号
1.2 多字符匹配
字符 多字符匹配
* 匹配前一个字符0次或者无限次
+ 匹配前一个字符1次或者无限次
匹配前一个字符0次或者1次
{m} {m,n} 匹配前一个字符m次,匹配前一个字符m-n次
*? +? ?? 匹配模式变为非贪婪(尽可能减少匹配字符,即分别匹配0、1、0次)
举例:
匹配一个字符串开头是大写字母,后面跟着 >=0 个小写字母:Zhangfeng
[A-Z][a-z]*
匹配一个Python变量名是否有效(开头可以是_和字母,不可以是数字)
[_a-zA-Z]+[_\w]*
匹配0-99中任意数字,其中 01-09 该形式不对
[1-9]?[0-9],该写法匹配 05 形式时,结果是0,[1-9]? 表示1-9可以出现0-1次,                            而09前面没有出现1-9,再匹配第二个[0-9],便匹配上了0;即[1-9]?[0-9]可匹配的字符串大小是1-2(python中match方法是从头开始匹配,匹配到开头那个是符合正则表达式,则给出正确的返回值)
匹配@前面有6-9个字符的qq邮箱
[a-zA-Z0-9]{6,9}@qq.com
用正则表达式 [0-9][a-z]* 匹配字符串 3bc 时,结果为3bc
用正则表达式 [0-9][a-z]*? 匹配字符串 3bc 时,结果为3
用正则表达式 [0-9][a-z]+? 匹配字符串 3bc 时,结果为3b
用正则表达式 [0-9][a-z]?? 匹配字符串 3bc 时,结果为3
1.3 边界匹配
字符 边界匹配
^ 匹配字符串开头
$ 匹配字符串结尾
\A \Z 指定的字符串必须出现在开头,/结尾
举例:
匹配正确的邮箱格式:@前面有6-9个字符
^[\w]{6,9}@qq.com$,上述匹配@前面有6-9个字符的qq邮箱正则表达式 [a-zA-Z0-9]{6,9}@qq.com,匹配字符串 1236545@qq.comabc 时,亦可得到结果:1236545@qq.com
匹配以字符串 imooc 开头的字符串
\Aimooc[\w]*
1.4 分组匹配
字符 分组匹配
\ 匹配左右任意一个表达式
(a,b) 括号中表达式作为一个分组
\ 引用编号为number的分组匹配到的字符串
(?P) 分组起一个别名
(?P=name) 引用别名为name的分组匹配字符串
举例:
匹配 0-99 或者 100:
[0-9]?\d$|100
匹配@前有6-9个字符的 qq邮箱 或者 gmail 邮箱 或者 163邮箱:
[\w]{6,9}@(qq|163|gmail).com
匹配XML格式,如有:<book>python</book>
<[\w]+>,匹配<book>,结果:<book>
<([\w]+>):匹配<book>,结果:< book>,其中 <([\w]+>)\0 为:<, <([\w]+>)\1 为:book>
<([\w]+>)\1:匹配<book>book>,结果为:<book>book>,
<([\w]+>)[\w]+</\1 或者写成 <(?P<mark>[\w]+>)[\w]+</(?P=mark),匹配<book>python</book>,结果:<book>python</book>

二、Python其他方法

# search(pattern, string, flags=0)
# 在一个字符串中查找匹配

# 查找字符串中的数字
str = "imooc videonum = 1000"
result = str.search(r'\d+', str) 
# result = '1000'


# findall(pattern, string, flags=0)
# 找到匹配,返回所有匹配部分的列表

# 查找字符串中的所有数字
str2 = "c++ = 100, java = 55, python = 80"
result = str.findall(r'\d+', str) 
# result = ['100', '55', '80']

# split(pattern, string, maxsplit=0, flags=0) :
# 根据匹配分割字符串,返回分割字符串组成的列表

# 拆分字符串str = "Imooc:C C++ Java Python, C#",成各门课程列表
str = "Imooc:C C++ Java Python, C#"
re.split(r':| |,', str)

# 返回结果:['Imooc', 'C', 'C++', 'Java', 'Python', 'C#']
# sub(pattern, repl, string, count=0, flags=0)
# 将字符串中匹配正则表达式的部分替换为其他值

# 使查找到的字符串其数字部分自动加1
def add(match):
    val = match.group()
    num = int(val) + 1
    return str(num)

 str = "imooc videonum = 999"
 re.sub(r'\d+', add, str) # re.sub    

# 返回结果: str = "imooc videonum = 1000"

一个90后