正则表达式-学习笔记

闲来无事,敲两行代码,平生碌碌,唯不负韶华!

正则表达式学习笔记:课程连接

这里使用的语言为python

正则表达式-学习笔记

 

 

 正则表达式-学习笔记

 

 

 

点的使用

# [.] 点的使用 //可以匹配除了换行符以外任意的字符

如:一个点

import re

data = 'tormorrow'
pattern = '.'
res = re.match(pattern, data)
print(res.group())

  结果为:t

如两个点

import re

data = 'tormorrow'
pattern = '..'
res = re.match(pattern, data)
print(res.group())

结果为:to

找到某一姓氏的名字:

names = '李文', '李商隐', '李白', '小李'
pattern = '李.'
for name in names:
    res = re.match(pattern, name)
    if res:
        print(res.group())
        print(name)

运行结果;

李文
李文
李商
李商隐
李白
李白

中括号的使用

[] 代表匹配集合中的任意一个字符,注意是一个字符  

所有小写字母表示:[a-z]

范围表示[c-g]  c到g的集合

大写同理;

import re

strings = 'hello '
pattern = '[he]'
res = re.match(pattern, strings)
if res:
    print(res.group())

运行结果:

h

import re

strings = 'echo '
pattern = '[he]'
res = re.match(pattern, strings)
if res:
    print(res.group())

运行结果:

e

匹配数字

\d 匹配一个数字 0-9之间的

注意:且匹配有位置要求;

如:

import re

strings = '003 '
pattern = '\d'
res = re.match(pattern, strings)
if res:
    print(res.group())

结果:0

如:第一个不是数字

import re

strings = 'T003 '
pattern = '\d'
res = re.match(pattern, strings)
if res:
    print(res.group())

 

结果:未匹配到

 

匹配一个非数字

\D   匹配一个非数字,且有位置要求,在第一位

import re

strings = '003 '
pattern = '\D'
res = re.match(pattern, strings)
if res:
    print(res.group())

运行结果:未匹配到

如:

import re

strings = 'T003 'i
pattern = '\D'
res = re.match(pattern, strings)
if res:
    print(res.group())

运行结果:

T

 

匹配空格

\s 匹配一个空白空格  

如:

strings = '00   3 '
pattern = '\s'
res = re.match(pattern, strings)
if res:
    print('匹配到了'+res.group())
else:
    print('未匹配到')

运行结果:未匹配到

 

如:

import re

strings = ' 00   3 '
pattern = '\s'
res = re.match(pattern, strings)
if res:
    print('匹配到了'+res.group())
else:
    print('未匹配到')

运行结果:匹配到了

 

匹配非空白字符

\S  大些S 匹配非空白字符

import re

strings = ' 00 '
pattern = '\S'
res = re.match(pattern, strings)
if res:
    print('匹配到了'+res.group())
else:
    print('未匹配到')

结果: 未匹配到

import re

strings = 'w00 '
pattern = '\S'
res = re.match(pattern, strings)
if res:
    print('匹配到了'+res.group())
else:
    print('未匹配到')

结果:匹配到了w

匹配单词字符

\w  匹配单词字符,比如:  a-z 或 A-Z 或 0-9 或  "_" 下划线

\W 匹配非单词字符,于小w正好相反

 

匹配个数

匹配出现0次或无线次

*     " * ": 匹配前一个字符出现 0 次或者无限次,即可有可无

如:

import re

strings = 'Hello '
pattern = '[A-Z][A-Z]*'
res = re.match(pattern, strings)
if res:
    print('匹配到了'+res.group())
else:
    print('未匹配到')

结果为:

匹配到了H

如:

import re

strings = 'OMG... '
pattern = '[A-Z][A-Z]*'
res = re.match(pattern, strings)
if res:
    print('匹配到了'+res.group())
else:
    print('未匹配到')

结果为:

匹配到了OMG

匹配1次或无限次

+ : "+ " 加号代表匹配1次或者无限次数,即,至少1次

如:

import re

strings = 'OMG... '
pattern = '[A-Z][A-Z]+'
res = re.match(pattern, strings)
if res:
    print('匹配到了'+res.group())
else:
    print('未匹配到')

结果:

匹配到了OMG

如:

import re

strings = 'Hello... '
pattern = '[A-Z][A-Z]+'
res = re.match(pattern, strings)
if res:
    print('匹配到了'+res.group())
else:
    print('未匹配到')

结果:

未匹配到

 

小练习:

用正则表达式匹配变量名

分析:变量名由 字母、数字、下划线组成、但是起始位置不可以是 数字

所以:

pattern = '[a-zA-Z_]\w*'

 或

pattern = '[a-zA-Z_]+\w*'

如:

import re

strings = 'time_99 '
pattern = '[a-zA-Z_]\w*'
res = re.match(pattern, strings)
if res:
    print('匹配到了' + res.group())
else:
    print('未匹配到')

结果:

匹配到了time_99

如:

import re

strings = '9_time_99 '
pattern = '[a-zA-Z_]\w*'
res = re.match(pattern, strings)
if res:
    print('匹配到了' + res.group())
else:
    print('未匹配到')

结果:

未匹配到

如:

import re

strings = 'time+99 '
pattern = '[a-zA-Z_]\w*'
res = re.match(pattern, strings)
if res:
    print('匹配到了' + res.group())
else:
    print('未匹配到')

结果:匹配到了time

注意:当匹配的时候需要注意是否完全匹配了

匹配1次或者0次

\?  该字符前的字符出现最多1次 最少0次



import re

strings = 'i-can'
pattern = '[a-zA-Z_][\w]?'
res = re.match(pattern, strings)
if res:
    print('匹配到了' + res.group())
else:
    print('未匹配到')

结果:
匹配到了i


import re

strings = 'ican'
pattern = '[a-zA-Z_][\w]?'
res = re.match(pattern, strings)
if res:
    print('匹配到了' + res.group())
else:
    print('未匹配到')

结果:匹配到了ic

小练习:

匹配英文字符,遇到数字取一个停止,遇到其他特殊字符直接结束

pattern = '[a-zA-Z_]+[0-9]?'

 

次数限制

{} :花括号用来描述前导字符匹配的次数

{m}:精确匹配m次

{m,} : 前导字符至少出现m 次

{m,n} : 前导字符出现m 次 到n次

 

如;

import re

strings = '123456777'
pattern = '\d{4}'
res = re.match(pattern, strings)
if res:
    print('匹配到了' + res.group())
else:
    print('未匹配到')

结果:匹配到了1234

import re

strings = '123456777d'
pattern = '\d{4,}'
res = re.match(pattern, strings)
if res:
    print('匹配到了' + res.group())
else:
    print('未匹配到')

结果:

匹配到了123456777

 

小练习:

匹配邮箱:

import re

strings = '1075933062@qq.com'
pattern = '[a-zA-Z0-9]{6,11}@qq.com'
res = re.match(pattern, strings)
if res:
    print('匹配到了' + res.group())
else:
    print('未匹配到')

结果:

匹配到了1075933062@qq.com

 

 

 

import re

strings = '1075933062@qq.com'
pattern = '[a-zA-Z0-9]{6,11}@qq.com'
res = re.match(pattern, strings)
if res:
print('匹配到了' + res.group())
else:
print('未匹配到')
上一篇:String...与String[]的区别(转载)


下一篇:leetcode 179. 最大数(排序)