标签:显示 字符串匹配 table 中间 pre 获取 标准 hat The
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 |
\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*)? |
表示简单浮点数字符串 |
`compile(pattern,flag=0)` 返回正则表达式对象。
match(pattern,string,flags=0)
匹配成功返回匹配对象,失败返回Nonesearch(pattern,string,flags=0)
findall(pattern,string[,flags])
返回一个匹配列表finditer(pattern,string[,flags])
与findall 相同返回一个迭代器,迭代器返回一个匹配对象split(pattern,string,max=0)
正则表达式模式分隔符,将字符串分割为列表,返回成功匹配列表sub(pattern,repl,string,count=0)
group(num=0)
返回整个匹配对象groups(default=None)
返回一个包含所有陪陪子组的元组groupdict(default=None)
返回一个包含素哟有匹配命名子组的字典
re.compile()
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())
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('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
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
print(re.split(':','str1:str2:str3')) #['str1','str2','str3']
- 判断字符串是否符合正则表达式逻辑
- 通过正则表达式从指定的字符串中获取我们需要的特定部分。
#手机号码特征 13[\d]{9}
print(re.match(r'13[\d]{9}','13362158971').group())
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| |
标签:显示 字符串匹配 table 中间 pre 获取 标准 hat The
原文地址:https://www.cnblogs.com/hzyujun/p/12286380.html