模块 re
re 模块提供了正则表达式支持,包括利用正则进行匹配、分隔和替换的功能
- re.compile(pattern: str) -> Regex
- re.search(pattern: str, string: str) -> Option[(int, int)]
- re.match(pattern: str, string: str) -> bool
- re.split(pattern: str, string: str, maxsplit: int = 0) -> Tuple[str]
- re.findall(pattern: str, string: str) -> Tuple[str]
- re.sub(pattern: str, repl: str, string: str, count: int = 0)
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 代表替换全部)