正则表达式
Basic Patterns
a, X, 9, <
-- 除了以下字符外其它都表示它本身:. ^ $ * + ? { [ ] \ | ( )
- .
(句点) -- 匹配任何字符除了'\n'
\w
-- (注意是小写w) 匹配任一单个数字或字母或下划线_[0-9a-zA-Z_]
。 \W
(大写的 W)匹配任意单个非\w
字符
\b
-- 匹配单词的开头或结尾,也就是单词的分界处。它只匹配一个位置。
\b
作转义字符表示退格。
\s
-- (小写的 s) 匹配任意单个whitespace字符 [\n\r\t\f]
。\S
(大写 S) 匹配任意单个非\s
字符
\t
,\n
, \r
-- tab, newline, return
\d
-- 十进制数字 [0-9](在某些版本的正则表达式中没有这个匹配)
^
( = start), $
( = end) -- 分别匹配字符串的开头和结尾
\
-- 去转义。比如\.
就表示单纯的句点。
Repetition
+
-- 匹配一个或多个
*
-- 匹配0个或多个
?
-- 匹配0个或一个
{}
-- 指定重复次数。{2}匹配重复2次,{2,5}匹配重复2到5次。
Leftmost & Largest
- 正则表达式默认匹配字符串最左边并且最大的匹配字符串。
- 加一个?在pattern最后,可以让匹配largest转为smallest。
#Python
match = re.search(r'i+', 'piigiiii') => found, match.group() == "ii"
match = re.search(r'i+?', 'piigiiii') => found, match.group() == "i"
match = re.search(r'<.*>', '<b>aaa<\b>') => found, match.group() == "<b>aaa<\b>"
match = re.search(r'<.*?>', '<b>aaa<\b>') => found, match.group() == "<b>"
Square Brackets
- 方括号
[]
匹配括号中任一字符。
[]
中可以用短横线表示范围。如[0-9]
匹配从0到9任意一个数字。[a-zA-Z]
匹配任一个字母。如果要表示下划线这个字符,必须把-
放在最后,如[0-9-]
表示数字和-
。
- up-hat
^
放在[]中最开始位置,表示反转这个表达式。如[^ab]
匹配所有不是ab的字符。
Lecture