ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# ure – 简单的正则表达式 该模块实现了相应CPython模块的子集,如下所述。 有关更多信息,请参阅原始CPython文档:[re](https://docs.python.org/3.5/library/re.html#module-re). 该模块实现了正则表达式操作。 支持的正则表达式语法是CPython`re`模块的子集(实际上是POSIX扩展正则表达式的子集)。 ## 1\. 支持的运算符和特殊序列 * `.`: 匹配任何字符。 * `[...]`: 匹配字符集。 支持单个字符和范围,包括否定集(例如`[^ a-c]`)。 * `^`: 匹配字符串的开头。 * `$`: 匹配字符串的结尾。 * `?`: 匹配零个或前一个子模式之一。 * `*`: 匹配前一个子模式的零个或多个。 * `+`: 匹配前一个子模式中的一个或多个。 * `??`: 非贪婪版的`?`,匹配零或一,偏好为零。 * `*?`:`*`的非贪婪版本,匹配零或更多,优先选择最短匹配。 * `+?`: 非贪婪的“+”版本,匹配一个或多个,优先匹配最短。 * `|`: 匹配此运算符的左侧或右侧子模式。 * `(...)`: 分组。 每个组都在捕获(它捕获的子字符串可以使用`match.group()方法访问)。 * `\d`: 匹配数字。 相当于`[0-9]`。 * `\D`: 匹配非数字。 相当于`[^ 0-9]`。 * `\s`: * `\S`: 匹配空白。 相当于`[^ \t-\r]`. * `\w`: 匹配“单词字符”(仅限ASCII)。 相当于`[A-Za-z0-9_]`. * `\W`: 匹配非“单词字符”(仅限ASCII)。 相当于`[^A-Za-z0-9_]`. * `\`: 转义字符。 除了上面列出的那些之外,反斜杠后面的任何其他字符都是字面意思。 例如,`\*`等同于文字`*`(不被视为`*`运算符)。 请注意,`\r`,`\n,`等不是专门处理的,并且相当于文字字母`r`,`n`等。因此,不建议使用原始Python字符串(`r“”`)用于正则表达式。 例如,`r“\r \n”`用作正则表达式时相当于`“rn”`。 要匹配CR后跟LF的字符,请使用`"\r\n"`。 ## 2\. 不支持的表达式 * 重复计算 (`{m,n}`) * 命名组 (`(?P<name>...)`) * 非捕获组 (`(?:...)`) * 更高级的断言 (`\b, \B`) * 像`\r`,`\n`这样的特殊字符转义 - 使用Python自己的转义 * 其它 例子: ~~~ import ure # As ure doesn't support escapes itself, use of r"" strings is not # recommended. regex = ure.compile("[\r\n]") regex.split("line1\rline2\nline3\r\n") # Result: # ['line1', 'line2', 'line3', '', ''] ~~~ ## 3\. 方法 ### 3.1. 编译正则表达式, 返回[regex](http://docs.micropython.org/en/latest/library/ure.html?highlight=ure#regex)对象。 ``` ure.compile(regex_str[, flags]) ``` ### 3.2. 编译regex_str并匹配字符串。 匹配始终从字符串中的起始位置开始。 ``` ure.match(regex_str, string) ``` ### 3.3. 编译regex_str并在字符串中搜索它。 ``` ure.search(regex_str, string) ``` 与`match`不同,这将搜索字符串以匹配正则表达式的第一个位置(如果正则表达式被锚定,它仍然可以是0)。 ### 3.4. 编译regex_str并在字符串中搜索它,用replace替换所有匹配项,并返回新字符串。 ``` ure.sub(regex_str, replace, string, count=0, flags=0) ``` replace可以是字符串或函数。 如果它是一个字符串,那么`\<number>`和`\g<number>`形式的转义序列可用于扩展到相应的组(或不匹配组的空字符串)。 如果replace是一个函数,那么它必须采用一个参数(匹配)并且应该返回一个替换字符串。 如果指定了count并且非零,那么在进行许多替换之后,替换将停止。 flags参数被忽略。 注意:此函数的可用性取决于`MicroPython port`。 ### 3.5. 标记值,显示有关已编译表达式的调试信息。 ``` ure.DEBUG ``` (可用性取决于`MicroPython 移植实现`。) ## 4\. Regex 对象 编译了的正则表达式。 使用`ure.compile()`创建此类的实例。 ### 4.1. 类似于模块级函数`match()`,`search()`和`sub()`。 ``` regex.match(string) regex.search(string) regex.sub(replace, string, count=0, flags=0) ``` 如果将相同的正则表达式应用于多个字符串,则使用方法会更高效。 ### 4.2. 使用正则表达式拆分字符串。 ``` regex.split(string, max_split=-1) ``` 如果给出 max\_split,则指定要执行的最大拆分数。 返回字符串列表(如果指定了,则最多可以有 max\_split + 1 个元素)。 ## 5\. Match 对象 匹配`match()`和`search()`方法返回的对象,并传递给sub()中的替换函数。 ### 5.1. 返回匹配(子)字符串。 ``` match.group(index) ``` 整个匹配的索引为0,每个捕获组的索引为1和更高。 仅支持数字组。 ### 5.2. 返回包含匹配组的所有子串的元组。 ``` match.groups() ``` 注意:此方法的可用性取决于`MicroPython 移植实现`。 ### 5.3. 返回匹配的子字符串组的开头或结尾的原始字符串中的索引。 ``` match.start([index]) match.end([index]) ``` index默认为整个组,否则将选择一个组。 注意:这些方法的可用性取决于`MicroPython 移植实现`。 ### 5.4. 返回2元组`(match.start(index),match.end(index))`。 ``` match.span([index]) ``` 注意:此方法的可用性取决于`MicroPython 移植`是否实现。