正規表現(1)
I.基本概念
1.コンセプト:
です(正規表現と略される正規表現)正規表現の文字列は、特殊文字の様々な識別することができる文字列を説明する文字列のモードは、その後、正規表現は、類似した一連のに合わせてパターンに一致します文字列特徴(すなわち、複数のストリングが一致)。
Pythonの標準ライブラリの再モジュールは、正規表現をサポートしています。
2.正規表現はアルファベット:
アルファベット正規表現のための一般的なテキストのためにあるすべての大文字と小文字と数字のセットが。また、一部の特殊文字であってもよく、例えば、文字だけ「0」とアルファベット「1」を含むように言及します。アルファベットは、すべてのバイナリ文字列の集合、即ち、 "0"、 "1"、 "00"、 "01"、 "10"、 "11"、 "100"などを表すことができます。
例えば:
正規表現パターン | 一致する文字列 |
---|---|
パイソン | パイソン |
正規表現パターンは、「Pythonの」です。このモードは、他のシンボルを一致させるために、特別な記号を使用していない、
とだけ説明したコンテンツマッチは、一致するパターンが唯一の可能性があり、「パイソン」の文字列を含んで。正規表現のパワーは文字セットを定義するための特殊文字の導入、および繰り返しパターンマッチングサブセットです。そのためこれらの特殊記号のは、そのような正規表現一致する文字列は、だけではなく、単一の文字列を設定することができます。
3.特別な記号や文字
次の表は、一般的な正規表現の記号と特殊文字です。
正規表現パターンに一致するように整合複数のシンボルの(1)任意の使用
一致するシンボルを選択し、「|」(キーボード即ち、垂直バー)、異なる正規表現を分割するため、動作の「複数のモードのいずれかを選択」を表します。あるいは、また時々マッチングおよび(連合)や論理OR(論理和)と呼ばれます。
例えば:
正規表現パターン | 一致する文字列 |
---|---|
| B | A、B |
(2)任意の1文字に一致します
任意匹配字符:点号或者句点“ . ”,匹配除了换行符\n 以外的任何一个字符。(Python 正则表达式有一个编译标记[S 或者DOTALL],该标记能够推翻这个限制,使点号能够匹配换行符)。
例如:
正则表达式模式 | 匹配的字符串 |
---|---|
s.b | 匹配在字符“s”和字符“b”之间的任意一个字符,例如sab,sbb |
。。(其实是两个英文句点,但打两个句点死活显示三个!!) | 任意两个字符 |
.gg | 匹配在字符串gg之前的任意一个字符,例如egg |
注意:如要匹配句点(dot)或者句号(period)字符,必须使用反斜线转义句点符号的功能,例如“.”。
(3)定位符
字符 | 描述 |
---|---|
^,\A | 匹配输入字符串开始的位置。后者主要用于那些没有脱字符的键盘。 |
$,\Z | 匹配输入字符串结尾的位置。 |
\b | 匹配一个单词边界,即字与空格间的位置。 |
\B | 非单词边界匹配。 |
例如:
正则表达式模式 | 匹配的字符串 |
---|---|
subject | 任何包含subject的字符串 |
^begin | 匹配所有以begin开头的字符串 |
end$ | 匹配所有以end结尾的字符串 |
^subject$ | 任何由单独的字符串subject构成的字符串,如subjectsubject |
\ban | 匹配任意以an开头的单词,例如匹配单词angle中的字符串an |
gle\b | 匹配任意以gle结尾的单词,例如匹配单词angle中的字符串gle |
\Bed | 匹配单词appered,但是不匹配单词edge |
注意:
(1)\b 字符的位置是非常重要的。如果它位于要匹配的字符串的开始,它在单词的开始处查找匹配项。如果它位于字符串的结尾,它在单词的结尾处查找匹配项。
(2)对于 \B 非单词边界运算符,位置并不重要,因为匹配不关心究竟是单词的开头还是结尾。
(4)创建字符集
使用方括号“ [ ] ”匹配某些特定的字符,方括号有表达逻辑或的功能,ru [abc]表达a或b或c。可通过该字符创建一个字符集
例如:
正则表达式模式 | 匹配的字符串 |
---|---|
b[aeiu]t | bat,bet,bit,but |
[rd][ek][ds] | 一个包含四个字符的字符串,第一是“r”或“d”,二是“e”或“k”,三是“d”或“s”,例如red,dks。 |
(5)限定范围和否定
方括号中两个符号中间用连字符“ - ”连接,用于指定一个字符的范围;例如,A-Z、a-z 或者0-9 分别用于表示大写字母、小写字母和数值数字。
如果脱字符“ ^ ”紧跟在左方括号后面,这个符号就表示不匹配给定字符集中的任何一个字符。
例如:
正则表达式模式 | 匹配的字符串 |
---|---|
[A-Z][0-9] | 匹配满足第一个字符为大写A到Z中任意一个字符,第二个字符为0到9中任意一个字符 |
[^aeiou] | 一个不是不是元音字母的字符 |
(6)使用闭包操作符实现存在性和频数匹配
字符 | 描述 |
---|---|
* | 匹配前面的子表达式出现零次或多次。要匹配 * 字符,请使用 *。 |
+ | 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。 |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,使用 ?。 |
{N},{N,M} | 里面或者是单个值或者是一对由逗号分隔的值,用于精确匹配前面的表达式N次,或者N~M次 |
例如:
正则表达式模式 | 匹配的字符串 |
---|---|
[nm]o? | 匹配n,no,m,mo |
[nm]o* | 匹配第一个字符为n或m,接下来为若干个o,也可以没有o |
[nm]o+ | 匹配第一个字符为n或m,接下来为若干个o,至少一个o |
[0-9]{12,16} | 匹配12 至16 个数字 |
(7)表示字符集的特殊字符
字符 | 描述 |
---|---|
\d | 匹配一个数字字符。等价于 [0-9]。 |
\D | 匹配一个非数字字符。等价于 [^0-9]。 |
\w | 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。 |
\W | 匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
例如:
正则表达式模式 | 匹配的字符串 |
---|---|
\w+\d | 首先是一串由字母、数字、下划线组成的字符串,最后是一个数字。 |
(8)使用圆括号指定分组
当使用正则表达式时,一对圆括号可以实现以下任意一个(或者两个)功能:
• 对正则表达式进行分组;
• 匹配子组。
例如:
正则表达式模式 | 匹配的字符串 |
---|---|
\d+(.\d*)? | 表示简单浮点数的字符串;即任何十进制数字,后面可以接一个小数点和零个或者多个十进制数字,例如“0.004”、“2”、“75.”等。 |
(9)扩展表示法
用于实现一个前视(或者后视)匹配,或者条件检查。
字符 | 描述 |
---|---|
(pattern) | 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到。要匹配圆括号字符,请使用 ‘(’ 或 ‘)’。 |
(?:pattern) | 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 ( |
(?=pattern) | 正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 |
(?!pattern) | 正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 |
(?<=pattern) | 反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。 |
(?<!pattern) | 反向否定预查,与正向否定预查类似,只是方向相反。 |
(?#patterm) | 表示注释,所有内容都被忽略 |
例如:
正则表达式模式 | 匹配的字符串 |
---|---|
(?:.com) | マッチが、最後には文字.COMの最後まで取得していません |
(?=。com) | 文字列マッチングの一端のみが続く場合.COM |
(?!。com) | 文字列が後ろ.COMが続いていない場合のみ一致 |
(?<= WWW) | WWWの前に文字列が)ちょうど一致する場合 |
(?<!WWW) | WWWの前に文字列が一致しなかった場合 |