[size=medium]
[b]一、字符组[/b]
1. [0123456789]匹配0-9这些数字,也可以用[0-9]来表示,这种表示方法的原理实际上是利用了字符对应的ascII码,0-9对应48-57,当然也可以[A-Z][a-z]来表示字母,其中A-Z对应65-90,a-z对应97-122,但是[0-z]这种表示方法最好不要用,因为很多符号之类的字符,比如";","<"等等之类的也在[0-z]的范围内。
例如:re.search("^[0-z]$", ":") != None # => True
2. "^", "$" 分别匹配字符的起始位置和结束位置
例如: re.search("^[0-9]", "2a") != None # => True
re.search("[0-9]$", "a2") != None # => True
re.search("[0-9]$", "2a") != None # => False
re.search("^[0-9]$", "23") != None # => False (起始位置和结束位置都匹配的话,只适用于整个字符串就是一个数字符号的情况下)
re.search("^[0-9]$", "2") != None # => True
3. 元字符是指 “-”, “[”, “]”, “^”, “$”等等,如果要取消元字符的特殊含义,就需要转义,就是在元字符前加上“\”,其中“-”紧接着“[”也可以表示在字符组内部使用“-”
例如:re.search("^[-09]", "3") != None # =>False
re.search("^[-09]", "-") != None # =>True
re.search("^[0\\-9]", "-") != None # =>True
4. 原生字符串的使用
Python提供了原生字符串,形式为r"string",例如:r"^[0\-9]$" == "^[0\\-9]$",在Python里面尽量多用原生字符串。
5. 排除型字符组
书写格式为:[^],在“[”后面紧跟一个“^”,表示在当前位置,匹配一个没有列出的字符,例如:
re.search(r"^[^0-9][0-9]$", "A8") != None # =>True
re.search(r"^[^0-9][0-9]$", "8") != None # =>False (排除型字符组必须要匹配一个字符)
另外,在排除型字符组中,紧跟在“^”之后的“-”不是元字符,例如:
re.search(r"^[^-09]$", "-") != None # => False
6. 字符组简记法
\d 表示[0-9] ,d代表digit
\w 表示[0-9a-zA-Z_],看清楚,后面还有个"_", w代表word
\s 表示[ \t\r\n\v\f], s代表space
\D是\d的排除型字符组
\W是\w的排除型字符组
\S是\s的排除型字符组
[\s\S]这种用法表示任意字符
[b]二、量词[/b]
1.一般形式{n},例如\d{6}表示匹配6个数字
{m,n},例如\d{4,6}表示4到6个数字,记住逗号前后不要有空格
{m,],表示至少有m个
{0,n}, 表示之多有n个(在某些语言中也可是{,n})
2.常用量词
* 等价于{0,}
+ 等价于{1,}
? 等价于{0,1}
例如:re.search(r"^travell?er$", "traveler") != None # =>True
re.search(r"^travell?er$", "traveller") != None # =>True
re.search(r"^<[^>]+>$", "<body>") != None # =>True
re.search(r"^<[^>]+>$", "</table>") != None # =>True
re.search(r"^<[^>]+>$", "<>") != None # =>False
re.search(r"^\"[^\"]*\"$", "\"some\"") != None # =>True
re.search(r"^\"[^\"]*\"$", "\"\"") != None # =>True
[color=red]注意: 如果查找‘customerId: ccheaaweb|3’中的ccheaaweb的话,可以这样匹配
re.search(r"customerId: (\w+)\|").group(1),记得要将+写在\w后面而不是括号后面[/color]
3.数据提取
re.search()如果匹配成功,返回一个MatchObject 对象,可以调用MatchObject.group(0)来获取表达式的结果
例如:
print re.search(r"\d{6}", "ad123456bc").group(0) = > 123456
另外一种提取数据的方法是re.findall(pattern, string)
例如:
print re.findall(r"\d{6}", "zipcode1:201203, zipcode2:100859")
= > ['201203', '100859']
4.点号
一般都认为"."可以匹配任意字符,但是有一个字符不能由点号匹配,那就是换行符\n
5.匹配优先量词(贪婪量词)和忽略优先量词(惰性量词)
匹配优先量词,在拿不准是否需要匹配的时候,优先尝试匹配,以被将来回溯。如之前的"*","+","?",{m,n},{m,},{,n} 就是匹配优先。
忽略优先量词,如果不确定是否要匹配,会选择不匹配的状态,在匹配优先量词后后加上"?"就是忽略优先。
[/size]
[b]一、字符组[/b]
1. [0123456789]匹配0-9这些数字,也可以用[0-9]来表示,这种表示方法的原理实际上是利用了字符对应的ascII码,0-9对应48-57,当然也可以[A-Z][a-z]来表示字母,其中A-Z对应65-90,a-z对应97-122,但是[0-z]这种表示方法最好不要用,因为很多符号之类的字符,比如";","<"等等之类的也在[0-z]的范围内。
例如:re.search("^[0-z]$", ":") != None # => True
2. "^", "$" 分别匹配字符的起始位置和结束位置
例如: re.search("^[0-9]", "2a") != None # => True
re.search("[0-9]$", "a2") != None # => True
re.search("[0-9]$", "2a") != None # => False
re.search("^[0-9]$", "23") != None # => False (起始位置和结束位置都匹配的话,只适用于整个字符串就是一个数字符号的情况下)
re.search("^[0-9]$", "2") != None # => True
3. 元字符是指 “-”, “[”, “]”, “^”, “$”等等,如果要取消元字符的特殊含义,就需要转义,就是在元字符前加上“\”,其中“-”紧接着“[”也可以表示在字符组内部使用“-”
例如:re.search("^[-09]", "3") != None # =>False
re.search("^[-09]", "-") != None # =>True
re.search("^[0\\-9]", "-") != None # =>True
4. 原生字符串的使用
Python提供了原生字符串,形式为r"string",例如:r"^[0\-9]$" == "^[0\\-9]$",在Python里面尽量多用原生字符串。
5. 排除型字符组
书写格式为:[^],在“[”后面紧跟一个“^”,表示在当前位置,匹配一个没有列出的字符,例如:
re.search(r"^[^0-9][0-9]$", "A8") != None # =>True
re.search(r"^[^0-9][0-9]$", "8") != None # =>False (排除型字符组必须要匹配一个字符)
另外,在排除型字符组中,紧跟在“^”之后的“-”不是元字符,例如:
re.search(r"^[^-09]$", "-") != None # => False
6. 字符组简记法
\d 表示[0-9] ,d代表digit
\w 表示[0-9a-zA-Z_],看清楚,后面还有个"_", w代表word
\s 表示[ \t\r\n\v\f], s代表space
\D是\d的排除型字符组
\W是\w的排除型字符组
\S是\s的排除型字符组
[\s\S]这种用法表示任意字符
[b]二、量词[/b]
1.一般形式{n},例如\d{6}表示匹配6个数字
{m,n},例如\d{4,6}表示4到6个数字,记住逗号前后不要有空格
{m,],表示至少有m个
{0,n}, 表示之多有n个(在某些语言中也可是{,n})
2.常用量词
* 等价于{0,}
+ 等价于{1,}
? 等价于{0,1}
例如:re.search(r"^travell?er$", "traveler") != None # =>True
re.search(r"^travell?er$", "traveller") != None # =>True
re.search(r"^<[^>]+>$", "<body>") != None # =>True
re.search(r"^<[^>]+>$", "</table>") != None # =>True
re.search(r"^<[^>]+>$", "<>") != None # =>False
re.search(r"^\"[^\"]*\"$", "\"some\"") != None # =>True
re.search(r"^\"[^\"]*\"$", "\"\"") != None # =>True
[color=red]注意: 如果查找‘customerId: ccheaaweb|3’中的ccheaaweb的话,可以这样匹配
re.search(r"customerId: (\w+)\|").group(1),记得要将+写在\w后面而不是括号后面[/color]
3.数据提取
re.search()如果匹配成功,返回一个MatchObject 对象,可以调用MatchObject.group(0)来获取表达式的结果
例如:
print re.search(r"\d{6}", "ad123456bc").group(0) = > 123456
另外一种提取数据的方法是re.findall(pattern, string)
例如:
print re.findall(r"\d{6}", "zipcode1:201203, zipcode2:100859")
= > ['201203', '100859']
4.点号
一般都认为"."可以匹配任意字符,但是有一个字符不能由点号匹配,那就是换行符\n
5.匹配优先量词(贪婪量词)和忽略优先量词(惰性量词)
匹配优先量词,在拿不准是否需要匹配的时候,优先尝试匹配,以被将来回溯。如之前的"*","+","?",{m,n},{m,},{,n} 就是匹配优先。
忽略优先量词,如果不确定是否要匹配,会选择不匹配的状态,在匹配优先量词后后加上"?"就是忽略优先。
[/size]
本文介绍了正则表达式的字符组和量词等基础知识,包括如何使用字符组匹配特定范围内的字符,以及如何通过量词指定重复次数。还介绍了如何提取数据及正则表达式中的特殊字符。
23

被折叠的 条评论
为什么被折叠?



