知行迭代
导航
首页
最近更改
随机页面
常用
分类目录
Linux命令
Mediawiki常用
电脑技巧
工具
链入页面
相关更改
特殊页面
页面信息
登录
查看“正则表达式”的源代码
←
正则表达式
页面
讨论
阅读
查看源代码
查看历史
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:[
[1]
]
您可以查看和复制此页面的源代码。
正则表达式(Regular Expression),简写regex、regexp或RE。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。通常被用来检索、替换那些符合某个模式(规则)的文本。 ==简介== ===时间轴=== ==基本语法== 一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。如this, that都可以由<code>th(is|at)</code>这个模式来描述。 正则表达式由普通字符,比如:abc;或者是简单字符和特殊字符的组合,比如ab\*c。 ===元字符=== 特殊字符是由元字符或元字符和普通字符构成,比如\d表示匹配一个数字。元字符是有特殊意义的字符,它们被作为一般的字符使用时,必须要通过“转义”(前面加一个反斜杠“\”)来去除他们本身的特殊意义,这14个元字符如下: <nowiki>. ^ $ * + ? { } [ ] \ | ( )</nowiki> ===字符类=== {| class="wikitable" ! 特殊字符 ! 含义 ! 示例 |- | . | 默认匹配除换行符之外的任何单个字符。如果指定了参数DOTALL ,它将匹配包括换行符的任意字符。 | .n 匹配 "nay, an apple is on the tree" 中的 'an' 和 'on'. |- | \d | 匹配一个数字。等价于[0-9]。 | \d 匹配"B2 is the suite number."中的'2'。 |- | \D | 匹配一个非数字字符。等价于[^0-9]。 | \D 匹配"B2 is the suite number."中的'B' 。 |- | \w | 匹配一个单字字符(字母、数字或者下划线)。等价于 [A-Za-z0-9_]。 | \w 匹配 "apple," 中的 'a'和 |- | \W | 匹配一个非单字字符。等价于 [^A-Za-z0-9_]。 | \W匹配 "50%." 中的 '%'。"$5.28,"中的 '5'。 |- | \s | 匹配一个空白字符,包括空格、制表符、换页符和换行符。 | \s\w*匹配"foo bar."中的' bar'。 |- | \S | 匹配一个非空白字符。 | \S\w* 匹配"foo bar."中的'foo' |- | [字符集] | 匹配方括号中的任意一个字符。特殊符号"\ * . "在字符集没有特殊意义。可以使用破折号(-)来指定一个字符范围。 | [abcd] 和[a-d]是一样的,可以匹配"brisket"中的‘b’和“city”中的‘c’。 |- | [^字符集] | 反向字符集,匹配任何没有包含在方括号中的字符。可以使用破折号(-)来指定一个字符范围。任何普通字符在这里都是起作用的。 | [^abc] 和 [^a-c] 是一样的。可以匹配"brisket"中的‘r’和匹配“chop”中的‘h’。 |- | | | |} ===数量词=== {| class="wikitable" ! 特殊字符 ! 含义 ! 示例 |- | * | 匹配前一个表达式 0 次或多次。等价于 {0,}。 | bo* 匹配 "A ghost boooooed" 中的 'booooo' 和 "A bird warbled" 中的 'b' |- | + | 匹配前面一个表达式 1 次或者多次。等价于 {1,}。 | a+ 匹配 "candy" 中的 'a' 和 "caaaaaaandy" 中的 'aaaaaaa'。 |- | ? | 匹配前面一个表达式 0 次或者 1 次。等价于 {0,1}。还用于先行断言中,如本表的 x(?=y) 和 x(?!y) 条目所述。 | e?le? 匹配 "angel" 中的 'el'、"angle" 中的 'le' 以及 "oslo' 中的 'l'。 |- | {n} | n 是一个非负整数,匹配前一个字符刚好出现了n次。 | a{2}匹配“caandy”中的'aa'和“caaaandy”中的前面的'aa',但不匹配“candy”中的'a' |- | {n,} | n 是一个非负整数,匹配前一个字符至少出现了n次。 | a{2,}匹配“caandy”中的'aa'和“caaaandy”中的'aaaa',但不匹配“candy”中的'a' |- | {n,m} | m 和 n 均为非负整数,匹配前面的字符至少n次,最多m次。如果 n 或者 m 的值是0, 这个值被忽略。 | a{1, 3} 匹配“candy”中的a和“caandy”中的'aa'和“caaaandy”中的前面'aaa',但不匹配“cndy”中的任意字符。 |} ===定位=== {| class="wikitable" ! 特殊字符 ! 含义 ! 示例 |- | ^ | 匹配输入的开始。如果多行标志被设置为 true,那么也匹配换行符后紧跟的位置。在下面的特殊字符[^xyz]表示不包含方括号中的字符。 | ^A 匹配 "An E" 中的 'A',但不会匹配 "an A" 中的 'A'。 |- | $ | 匹配输入的结束。如果多行标志被设置为 true,那么也匹配换行符前的位置。 | t$ 匹配 "eat" 中的 't',但不匹配 "eater" 中的 't'。 |- | \b | 匹配一个词的边界。 | \bm 匹配“moon”中的‘m’,但oo\b 不能匹配"moon"中的'oo',而 oon\b/匹配"moon"中的'oon'。 |- | \B | 匹配一个非单词边界。 | \B..匹配"noonday"中的'oo',y\B..匹配"possibly yesterday"中的’yes‘。 |} ===分组=== ===字符转义=== {| class="wikitable" ! 特殊字符 ! 含义 ! 示例 |- | \n | 匹配一个换行符 (U+000A)。 | |- | \r | 匹配一个回车符 (U+000D)。 | |- | \t | 匹配一个水平制表符 (U+0009)。 | |- | \v | 匹配一个垂直制表符 (U+000B)。 | |- | \b | 匹配一个退格(U+0008)。 | |- | \f | 匹配一个换页符 (U+000C)。 | |- | | | |- | | | |} ===其他=== {| class="wikitable" ! 特殊字符 ! 含义 ! 示例 |- | \ | 转义特殊字符,或和其他字符构成特殊字符。 | \\ 匹配 \ ,\d 匹配数字 |- | \cX | 匹配字符串中的一个控制符,当X是处于A到Z之间的字符的时候。 | \cM匹配字符串中的 control-M (U+000D)。 |- | (x) | 分组,能够重复使用x表达式和提取该组匹配值。重复引用通过\n(数字)。改组的值在正则表达式的替换环节可以通过$n(数字)来获取。注意组值为第一次匹配值 | (f.o) \1 匹配'bar fao fao bar'中的'fao fao',python中值 |- | (?:x) | | |} {{了解更多 |[https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions MDN文档:JavaScript - 正则表达式] |[https://docs.python.org/zh-cn/3/library/re.html#regular-expression-syntax Python3 文档:标准库 re - 正则表达式语法] }} ==Python中使用== ===re模块=== re模块提供两种使用方式,两种方式效果一样:一种是直接调用re模块的函数,一般使用这种方式。另一种是先调用<code>re.compile()</code>生成正则对象,再通过对象调用方法,这种适用于一个正则表达式需要多次使用,因为会编译缓存所以速度更快。以match函数示例: <syntaxhighlight lang="python" > # 直接使用 result = re.match(pattern, string) # 编译后使用 prog = re.compile(pattern) result = prog.match(string) </syntaxhighlight> {{了解更多 |[https://docs.python.org/zh-cn/3/library/re.html Python 文档:re] |[https://docs.python.org/zh-cn/3/howto/regex.html Python 文档:正则表达式HOWTO] |[https://docs.python.org/zh-cn/3/library/re.html#re.compile Python 文档:re函数/re.compile() ] }} ===re模块的函数=== {| class="wikitable" ! 名称 ! 描述 ! 示例 |- | re.search() | 搜索整个字符串,返回一个成功的匹配 | <code>re.match('e','hello')</code>返回一个匹配对象,第二个字母e |- | re.match() | 从起始位置开始搜索,返回从起始位置开始都成功的匹配。 | <code>re.match('h','hello')</code>返回一个匹配对象,第一个h。 <br /><code>re.match('e','hello')</code>返回None |- | re.fullmatch() | 需要整个字符串都匹配,返回一个成功的匹配。3.4 新版功能。 | |- | re.findall() | 查找所有匹配的字符串,返回匹配的字符串列表或字符串元组列表。 | |- | re.finditer() | | |- | re.split() | 用正则表达式分割。 |<code>re.split(r'\W+', 'Words, words, words.')</code>返回<nowiki>['Words', 'words', 'words', '']</nowiki> |- |re.sub() | 用正则表达式替换 | |- | re.subn() | | |- | re.escape() | | |} {{了解更多 |[https://docs.python.org/zh-cn/3/library/re.html#functions Python文档:re函数] |[https://docs.python.org/zh-cn/3/howto/regex.html#performing-matches Python文档:正则表达式HOWTO/应用匹配] }} ===re模块的匹配对象=== search()、match()、fullmatch()等函数如果匹配到结果就会返回一个匹配对象,否则返回None。以下示例中的m也是表中示例m: <syntaxhighlight lang="python" > import re m = re.search('\d+', '电话:123') print(m.group()) # 123 print(m.span()) # (3, 6) </syntaxhighlight> {| class="wikitable" ! 名称 ! 描述 ! 示例 |- | group() | 返回正则匹配的字符串 | |- | groups() | | |- | start() | 返回匹配的开始位置 | |- | end() | 返回匹配的结束位置 | |- | span() | 返回包含匹配 (start, end) 位置的元组 | |- | | | |- | | | |} {{了解更多 |[https://docs.python.org/zh-cn/3/library/re.html#match-objects Python文档:re/匹配对象] }} ==资源== ===语言或平台官网=== * PCRE官网:https://www.pcre.org/ * Python 标准库 re:https://docs.python.org/zh-cn/3/library/re.html * .NET 正则表达式:https://learn.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expressions ===相关网站=== * [https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions MDN文档:JavaScript - 正则表达式] * [https://learn.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expression-language-quick-reference .Net文档:正则表达式语言 - 快速参考] * [https://deerchao.cn/tutorials/regex/regex.htm deerchao.cn:正则表达式30分钟入门教程] * [https://zh.wikipedia.org/wiki/正则表达式 维基百科:正则表达式] * [https://perldoc.perl.org/perlre.html Perl 文档] [[分类:数据分析]]
本页使用的模板:
模板:了解更多
(
查看源代码
)
返回至“
正则表达式
”。