正则表达式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了正则表达式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3862字,纯文字阅读大概需要6分钟。
内容图文
正则表达式
- 正则表达式为高级的文本模式匹配,抽取,与/或文本形式的搜索和替换功能提供基础。
- 正则表达式(regex)由一些字符和特殊字符组成的字符串。正则表撒式能按某种模式匹配一些列有相似特征字符串。只能匹配一个字符串的正则表达式毫无意义。
-
python通过标准库re模块支持正则表达式。
第一个正则表达式
-
foo 只能匹配 foo,正则表达是强大之处在于引用特殊字符来定义字符集合,匹配子组,重复模式。匹配字符串集合,而不是某个单字符串
特殊符号和字符
表示法 | 描述 | 正则表达式示例 |
---|---|---|
符号 | ||
literal
|
匹配文本字符串的字面值literal |
foo
|
re1|re2
|
匹配正则表达式re1或re2 |
foo|bar
|
.
|
匹配任何字符(除了\n) |
b.b
|
^
|
匹配字符串起始部分 |
^Dear
|
$
|
匹配字符串终止部分 |
/bin/sh$
|
*
|
匹配0次或多次前面出现正则表达式 |
[A-Za-Z0-9]*
|
+
|
匹配1次或多次 | [A-Z]+ |
?
|
匹配0次或1次 | [A-Z]? |
{N}
|
匹配N次前面出现正则表达式 |
[0-9]{N}
|
{N,M}
|
||
[...]
|
字符集 |
[aeiou]
|
[x-y]
|
匹配x-y范围内任意一字符 |
[0-9]
|
[^...]
|
不匹配此字符集任意一个字符 |
[^aeiou]
|
特殊字符 | ||
\d
|
匹配0-9 |
data\d+.txt
|
\w
|
||
\s
|
||
扩展表示法 |
使用择一匹配符号匹配多个正则表达式模式
正则表达式模式 | 匹配字符串 |
---|---|
at|home
|
at,home |
p匹配任意单字符(.)除了\n
换行
正则表达式模式 | 匹配字符串 |
---|---|
f.o | fao、f9o |
\.
|
. |
从字符串起始或者结尾或者单词边界匹配
正则表达式模式 | 匹配字符串 |
---|---|
^From | 任何以From作为起始字符串 |
/bin/tcsh$ | 任何以/bin/tcsh结尾字符串 |
^Subject:hi$ | 任何由单独字符串Subject:hi构成字符串 |
the | 匹配the |
\bthe | 任何以the开始字符串 |
\bthe\b | 仅仅匹配单词the |
Bthe | 任何包含但并不以the作为起始字符串 |
创建字符集合
正则表达式模式 | 匹配字符串 |
---|---|
b[aeiu]t | bat,bet,bit,but |
限定范围和否定
使用闭包操作符实现存在性和频数匹配
表示字符集的特殊字符
使用圆括号指定分组
- 只要用一对圆括号包裹任何正则表达式
- 对正则表达式进行分组
- 匹配子组
正则表达式模式 | 匹配字符串 |
---|---|
\d+(\.\d*)?
|
表示简单浮点数字符串 |
扩展表示法
正则表达式和python语言
re模块:核心函数和方法
-
`compile(pattern,flag=0)` 返回正则表达式对象。
- re模块函数和正则表达式对象方法
match(pattern,string,flags=0)
匹配成功返回匹配对象,失败返回Nonesearch(pattern,string,flags=0)
findall(pattern,string[,flags])
返回一个匹配列表finditer(pattern,string[,flags])
与findall 相同返回一个迭代器,迭代器返回一个匹配对象split(pattern,string,max=0)
正则表达式模式分隔符,将字符串分割为列表,返回成功匹配列表
- re模块函数和正则表达式对象方法
sub(pattern,repl,string,count=0)
- 常用匹配对象方法
group(num=0)
返回整个匹配对象groups(default=None)
返回一个包含所有陪陪子组的元组groupdict(default=None)
返回一个包含素哟有匹配命名子组的字典编译正则表达式
re.compile()
匹配对象以及group()和groups()方法
使用 match()方法匹配字符串
- match() search()匹配对象; 匹配对象group()方法用于显示成功匹配。
import re r = re.compile('foo') #返回正则表达式对象 m = re.match(r,'foo') #模式匹配对象 if m is not None: print(m.group()) m = re.match(r,'food on the table foo') if m is not None: print(m.group())
使用search()在一个字符串中查找模式(搜索与匹配对比)
- 搜索模式出现在一个字符串中间部分。
m = re.match('foo','seafood') #匹配失败
m = re.search('foo','seafood') #匹配成功
重复,特殊字符及其分组
- 简单电子邮件正则表达式
\w+@\w+\.com
---> yujun@qq.com\w+@(\w+\.)?\w+\.com
--->yujun@qq.com yujun@www.qq.com\w+@(\w+\.)*\w+\.com
---->nobody@www.xxx.yyy.zzz.com - 匹配能够提取内容
m = re.match(‘(a)(b)‘,‘ab‘)
print(m.group()) #ab
print(m.group(1)) #a
print(m.group(2)) #b
print(m.groups()) #(‘a‘,‘b‘)
m = re.match('(\w\w\w)-(\d\d\d)','abc-123')
print(m.group()) #'abc-123'
print(m.group(1)) #子组1 'abc'
print(m.group(2)) #子组2 '123'
print(m.groups()) #('123','abc')
re模块方法 findall() sub() subn() split()
- 使用findall() fiditer()查找每一次出现位置
re.findall('car','car') # ['car']
re.findall('car','scray') #['car']
re.findall('car','carry the barcard to the car') #['car','car','car']
s = 'That and this'
print(re.findall(r'(th\w+)',s,re.I)) #['This','that]
it = re.finditer(r'(th\w+)',s,re.I)
g = next(it)
print(g.groups()) #('This',)
g = next(it)
print(g.groups()) #('that')
print(g.group(1)) #that
使用sub()和subn()搜索与替换
print(re.sub('[ae]','X','abcedf')) #XbcXdf
print(re.subn('[ae]','X','abcedf')) #('XbcXdf', 2)
# 可以用n来代替分组编号 MM/DD/YY --> DD/MM/YY
print(re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|d{4})',r'\2/\1/\3','2/20/91')) #20/2/91
在限定模式上使用splite()分割字符串
print(re.split(':','str1:str2:str3')) #['str1','str2','str3']
扩展符号
正则表达式入门
正则表达式目的
- 判断字符串是否符合正则表达式逻辑
- 通过正则表达式从指定的字符串中获取我们需要的特定部分。
- 如何判断一个字符串是否是手机号码?
#手机号码特征 13[\d]{9}
print(re.match(r'13[\d]{9}','13362158971').group())
match方法
- match object = re.match(‘正则表达式‘,‘要匹配字符串‘)
-
match object.group() 返回字符串匹配部分
正则表达式单字符匹配
字符 | 功能 | 示例 |
---|---|---|
. | 匹配任意一个字符除了\n |
print(re.match(‘.‘,‘你好‘).group()) #你
|
[] | 匹配[]中列举一个字符 | |
\d | ||
\D | ||
\s | 空白字符 | |
\S | ||
\w | ||
\W |
正则表达式描述数量
字符 | 功能 |
---|---|
* | 匹配前一个字符出现0次或者无限次 |
+ | |
? | |
{m} | |
{m,} | |
{m,n} |
s = '\\nabc'
print(re.match('\\\\nabc',s)) #\\nabc
print(re.match(r'\\nabc',s)) #<_sre.SRE_Match object; span=(0, 5), match='\\nabc'>
表示边界
字符 | 功能 |
---|---|
$ | re.match(r‘1[3]\d{9}$‘,‘13888888888‘) |
^ | match感觉不出来,findall(),search() |
b | |
B |
正则分组
字符 | 功能 |
---|---|
(ab) | 将括号中字符作为一个分组 |
\num | 引用分组num匹配到的字符串 |
原文:https://www.cnblogs.com/hzyujun/p/12286380.html
内容总结
以上是互联网集市为您收集整理的正则表达式全部内容,希望文章能够帮你解决正则表达式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。