模块 re

re 模块提供了正则表达式支持,包括利用正则进行匹配、分隔和替换的功能

re 模块还在开发中,随时可能有破坏性更新,如果需要使用请提前联系 ambot-script 开发团队

re.compile(pattern: str) -> Regex

编译出一个 Regex 对象,可以在后面对该对象调用 search、match、split、findall、sub 方法(参数与下面的五个函数相同)

  • .search(string)
  • .match(string)
  • .split(string, maxsplit=0)
  • .findall(string)
  • .sub(repl, string, count=0)

正则表达式的语法请参考 Golang regexp/syntax 文档

一个可能需要的场景是:想要 Case Insensitive 的匹配,与其他的语言额外指定 flag 不同,你需要在正则表达式最前面写上 (?i) 来开启 flag

re.search(pattern: str, string: str) -> Option[(int, int)]

根据指定的 pattern 在 string 中搜索出现的位置,如果搜索到则返回搜索到的结果(二元组,第一个元素为匹配到的左边界、第二个元素为匹配到的右边界+1),如果未搜索到返回 None

re.search('x', "hello, world!") # 返回 None
re.search('l', "hello, world!") # 返回 (2, 3)

re.match(pattern: str, string: str) -> bool

在 string 的起始处进行搜索 pattern,如果存在返回 True,否则返回 False

这一函数未来可能会改为如果存在返回 Match 对象、不存在返回 None 因此当前情况下建议使用 bool(re.match(...)) 进行调用该函数以避免未来改动造成的脚本异常

re.split(pattern: str, string: str, maxsplit: int = 0) -> Tuple[str]

利用正则做字符串切分,maxsplit 为最大切分次数(0 代表不限制)

re.findall(pattern: str, string: str) -> Tuple[str]

查找所有可能的结果,返回匹配到的元素列表(不会重叠)

re.findall('l+', "hello, world!") # 返回 ("ll", "l")

re.sub(pattern: str, repl: str, string: str, count: int = 0)

利用正则做字符串文本替换,count 为最大替换次数(默认的 0 代表替换全部)