Python常用正则表达式符号浅析,python正则表达式


对Python中正则表达式的理解,主要就是对符号的理解,本文即对Python中常用的正则表达式符号进行简析。其主要的符号有:

.
默认匹配一个字符,不包含换行符,如果设置DOTALL则匹配换行符

^
匹配行首

$
匹配行尾

*
匹配0个或者多个重复


匹配一个或者多个重复


匹配一个或者零个重复

*?,+?,??
按照非贪婪模式匹配

{m},{m,n},{m,n}?
分别匹配m个重复,m至n个重复,m至n个重复按照非贪婪模式

\
转义

[]
[abc],[a-z][^a-z]
|
或者匹配 'a|b'
(...)
匹配组

(?iLmsux)

(?:...) (?P<name>...)
>>> re.match('(?P<name>abc){2}','abcabc').groupdict()
{'name': 'abc'}
(?P=name)
>>> re.match(r'(?P<name>abc)----(?P=name)','abc----abc').group()
'abc----abc'
(?#...) #后面的内容为注释
(?=...)

匹配的字符串后面的内容需要匹配

>>> re.match(r'phone(?=\d{3})','phone123').group()
'phone'#

(?!...)

匹配的字符后面内容不能匹配

>>> re.match(r'phone(?!\d{3})','phoneabc123').group()
'phone'
(?<=...)

匹配的字符串前面需要匹配

(?<!...) 匹配的字符前面不能匹配

(?(id/name)yes-pattern|no-pattern)
\number
\A 匹配字符串的开头
\b 匹配单词边界

\B
\b的反义

\d 表示[0-9]
\D表示 [^0-9]
\s表示 [ \t\r\n\f\v]
\S 为非空白字符
\w等价于 [a-zA-Z0-9]
\W \w的反义

\Z 匹配字符串的结束


Python正则表达式 检索文本信息

import re
text = open(r'文件路径log.txt').read() #先读取文本
sys_bok = text.split('bck') #分离sys和bok为两部分
syss = sys[0].split('\n')
bcks = sys[1].split('\n')
print 'sys'
for sys in syss:
s = re.findall(r'[0-9]+',sys)

print ' '.join(s)

print 'bck'
for bck in bcks:
b = re.findallre.findall(r'[0-9]+',bck)
print ' '.join(b)

如此,就会输出如下你想要的数据格式:
sys
20 12 79
20 13 81
20 14 12
bck
20 12 164
20 13 278
20 14 128
 

Python正则表达式问题

你理解错了。r"2x\+5y"这里是指对 字符串 中的"\"不做转义处理;
而正则表达式中"\+"表示的是对 正则表达式 中的"+"做转义处理,这是因为"+"在正则表达式中有特殊含义,这和字符串的转义是没有关系的。

说的更清楚一点就是,你在程序里写"\\+"或者r"\+"在内存里都是保存了一个"\"和一个"+",而正则表达式引擎只要从内存读取到一个连续的"\"和"+",就会理解为你想要匹配"+"这个字符。

所以说,如果你不在字符串前写r,那个正则表达式字符串应该这么写的:
"2x\\+5y|7y-3z"
 

评论关闭