python 正则表达式之二
来源:互联网 发布:java notify在哪个包中 编辑:程序博客网 时间:2024/06/11 10:30
使用正则表达式
--re模块提供了一个正则表达式引擎的接口,可以让你将REstring编译成对象并用它们来进行匹配
--编译正则表达式
#!python
>>>import re
>>>p = re.compile('ab*')
>>>print p
--re.compile()也接受可选的标志参数,常用来实现不同的特殊功能和语法变更
#!python
>>>p = re.compile('ab*',re.IGNORECASE)
--反斜杠的麻烦
1.字符串前加"r"反斜杠就不会被任何特殊方式处理
\section 要匹配的字符串
\\section 为re.compile取消反斜杠的特殊意义
"\\\section" 为"\\section"的字符串实值(string literals)取消反斜杠的特殊意义
--执行匹配
1.'RegexObject'实例有一些方法和属性,完整的列表查阅Python Library Reference
match():决定RE是否在字符串刚开始的位置匹配
search():扫描字符串,找到这个RE匹配的位置
findall():找到RE匹配的所有子串,并把它们作为一个列表返回
finditer():找到RE匹配的所有子串,并把它们作为一个迭代器返回
如果没有匹配的话,match()和search()将返回None;否则,返回一个'MatchObject'实例。
--MatchObject实例方法
group():返回RE匹配的字符串
start():返回匹配开始的位置
end():返回匹配结束的位置
span():返回一个元组包含匹配(开始,结束)的位置
实际编程中,最常用的做法是将'MatchObject'保存在一个变量里,然后检查它是否 为None.
#!python
p = re.compile(...)
m = p.match('string goes here')
if m:
print 'Match found;',m.group()
else:
print 'No match'
--模块级函数
1.re模块也提供了顶级函数调用如match()、search()、sub()、subn()、split()、 findall()等
--编译标志-flags
DOTALL,S:使.匹配包括换行在内的所有字符
IGNORECASE,I:使匹配对大小写不敏感
LOCALE,L:做本地化识别(local-aware)匹配
MULTILINE,M:多行匹配,影响^和$
VERBOSE,X:能够使用REs的verbose状态,使之被组织的更清晰易懂
--分租
"("和")"
--re模块提供了一个正则表达式引擎的接口,可以让你将REstring编译成对象并用它们来进行匹配
--编译正则表达式
#!python
>>>import re
>>>p = re.compile('ab*')
>>>print p
--re.compile()也接受可选的标志参数,常用来实现不同的特殊功能和语法变更
#!python
>>>p = re.compile('ab*',re.IGNORECASE)
--反斜杠的麻烦
1.字符串前加"r"反斜杠就不会被任何特殊方式处理
\section 要匹配的字符串
\\section 为re.compile取消反斜杠的特殊意义
"\\\section" 为"\\section"的字符串实值(string literals)取消反斜杠的特殊意义
--执行匹配
1.'RegexObject'实例有一些方法和属性,完整的列表查阅Python Library Reference
match():决定RE是否在字符串刚开始的位置匹配
search():扫描字符串,找到这个RE匹配的位置
findall():找到RE匹配的所有子串,并把它们作为一个列表返回
finditer():找到RE匹配的所有子串,并把它们作为一个迭代器返回
如果没有匹配的话,match()和search()将返回None;否则,返回一个'MatchObject'实例。
--MatchObject实例方法
group():返回RE匹配的字符串
start():返回匹配开始的位置
end():返回匹配结束的位置
span():返回一个元组包含匹配(开始,结束)的位置
实际编程中,最常用的做法是将'MatchObject'保存在一个变量里,然后检查它是否 为None.
#!python
p = re.compile(...)
m = p.match('string goes here')
if m:
print 'Match found;',m.group()
else:
print 'No match'
--模块级函数
1.re模块也提供了顶级函数调用如match()、search()、sub()、subn()、split()、 findall()等
user1@ubuntu:~$ pythonPython 2.7.3 (default, Sep 26 2013, 20:03:06) [GCC 4.6.3] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import re>>> r1 = r"\d{3,4}-?\d{8}">>> re.findall(r1,'010-12345678')['010-12345678']>>> p_tel=re.compile(r1)>>> p_tel<_sre.SRE_Pattern object at 0x7f1469fbd810>>>> p_tel.findall('010-12345678')['010-12345678']>>> >>> csvt_re = re.compile(r'csvt',re.I)>>> csvt_re.findall('CSVT')['CSVT']>>> csvt_re.findall('csvt')['csvt']>>> csvt_re.findall('csvT')['csvT']>>> csvt_re.match('csvT hehe')<_sre.SRE_Match object at 0xc6f100>>>> csvt_re.match('hehe')>>> csvt_re.match('hehe csvT')>>> x = csvt_re.match('csvt hello')>>> if x:... pass... >>> csvt_re.search('hehe csvT')<_sre.SRE_Match object at 0xc6f1d0>>>> csvt_re.search('hehe')>>> csvt_re.search('csvt heihei')<_sre.SRE_Match object at 0xc6f100>>>> csvt_re.findall('csvt csvt heihei')['csvt', 'csvt']>>> csvt_re.finditer('csvt csvt heihei')<callable-iterator object at 0xc84b50>>>> x =csvt_re.finditer('csvt csvt heihei')>>> x<callable-iterator object at 0xc84b90>>>> x.next<method-wrapper 'next' of callable-iterator object at 0xc84b90>>>> csvt_re.match('csvt hello')<_sre.SRE_Match object at 0xc6f168>>>> csvt_re.match('hello')>>> x = csvt_re.match('csvt hello')>>> x<_sre.SRE_Match object at 0xc6f100>>>> x.group<built-in method group of _sre.SRE_Match object at 0xc6f100>>>> x.group()'csvt'>>> help(re.sub)>>> s = "hello csvt">>> >>> s.replace('csvt','python')'hello python'>>> s'hello csvt'>>> rs = r'c..t'>>> re.sub(rs,'python','csvt caat cvvt cccc')'python python python cccc'>>> re.subn(rs,'python','csvt caat cvvt cccc')('python python python cccc', 3)>>> ip = "1.2.3.4">>> ip.split('.')['1', '2', '3', '4']>>> >>> s = "123+456-789*000">>> re.split(r'[\+\-\*]',s)['123', '456', '789', '000']>>> dir(re)['DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_alphanum', '_cache', '_cache_repl', '_compile', '_compile_repl', '_expand', '_pattern_type', '_pickle', '_subx', 'compile', 'copy_reg', 'error', 'escape', 'findall', 'finditer', 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'sys', 'template']>>> help(re)>>>
--编译标志-flags
DOTALL,S:使.匹配包括换行在内的所有字符
IGNORECASE,I:使匹配对大小写不敏感
LOCALE,L:做本地化识别(local-aware)匹配
MULTILINE,M:多行匹配,影响^和$
VERBOSE,X:能够使用REs的verbose状态,使之被组织的更清晰易懂
--分租
"("和")"
user1@ubuntu:~$ pythonPython 2.7.3 (default, Sep 26 2013, 20:03:06) [GCC 4.6.3] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import re>>> r1 = r"csvt.net">>> re.findall(r1,'csvt.ne')[]>>> re.findall(r1,'csvt.net')['csvt.net']>>> re.findall(r1,'csvtonet')['csvtonet']>>> re.findall(r1,'csvt\nnet')[]>>> re.findall(r1,'csvt\nnet',re.S)['csvt\nnet']>>> s = """... hello csvt... csvt hello... hello csvt hello... csvt hehe... """>>> r = r"^csvt">>> re.findall(r,s)[]>>> s'\nhello csvt\ncsvt hello\nhello csvt hello\ncsvt hehe\n'>>> re.findall(r,s,re.M)['csvt', 'csvt']>>> tel = r"""... ^\d{3,4}... -?... \d{8}$... """>>> re.findall(tel,'010-12345678')[]>>> re.findall(tel,'010-12345678',re.X)['010-12345678']>>> >>> re.findall(tel,'010-12345678',re.VERBOSE)['010-12345678']>>> email = r"^\w{3}@\w+(\.com|\.cn)">>> re.match(email,'zzz@csvt.com')<_sre.SRE_Match object at 0x21b2558>>>> re.match(email,'zzz@csvt.cn')<_sre.SRE_Match object at 0x21b25d0>>>> re.match(email,'zzz@csvt.org')>>> re.findall(email,'zzz@csvt.com')['.com']
- python 正则表达式之二
- Python正则表达式之二
- python re 正则表达式之二
- Python正则表达式二
- 正则表达式之二
- 正则表达式之二
- python之正则表达式
- python之正则表达式
- Python之正则表达式
- Python之正则表达式
- python之正则表达式
- python之正则表达式
- python之正则表达式
- Python之正则表达式
- Python之正则表达式
- Python之正则表达式
- Python之正则表达式
- python 之正则表达式
- 毕业季总结(续)
- linux make讲解
- C语言 不定参数的简单使用
- ubuntu 设置输入法
- java synchronized详解
- python 正则表达式之二
- 【IOS+Android】信号量
- 哪些软件是用C++写的
- 电容滤波电路,电感滤波电路作用原理
- 配置环境真是复杂的事情
- 电容在电路中的作用
- free buffer waits等待事件
- python 浅拷贝和深拷贝
- CCNode