Lumesh 正则表达式模块使用文档
模块函数列表
使用help regex
查看
功能说明
提供基于正则表达式的字符串处理能力,使用轻量级 regex_lite
库实现。所有函数支持两种调用方式:
- 函数式调用:
regex.func(arg0, arg1...)
- 命令式调用:
regex.func arg0 arg1...
函数列表及详细说明
1. regex.match
- 功能:检查文本是否匹配正则模式
- 参数:
pattern
: string - 正则表达式text
: string - 待匹配文本
- 返回值:boolean - 匹配成功返回
true
,否则false
- 示例:
# 检查数字匹配
regex.match '\d+' '123' # => true
regex.match '\d+' 'abc' # => false
2. regex.find
- 功能:查找首个匹配项的位置和内容
- 参数:
pattern
: string - 正则表达式text
: string - 待搜索文本
- 返回值:
[start, end, text] | none
start
: integer - 匹配起始索引(从0开始)end
: integer - 匹配结束索引text
: string - 匹配内容- 无匹配时返回
none
- 示例:
regex.find '\d+' 'abc123def'
# => [3, 6, '123']
3. regex.find_all
- 功能:查找所有匹配项的位置和内容
- 参数:
pattern
: string - 正则表达式text
: string - 待搜索文本
- 返回值:
[[start, end, text], ...]
- 匹配结果列表(可能为空) - 示例:
regex.find_all '\d+' '12a34b56'
# => [[0,2,'12'], [3,5,'34'], [6,8,'56']]
4. regex.capture
- 功能:提取首个匹配的捕获组
- 参数:
pattern
: string - 含捕获组的正则表达式text
: string - 待搜索文本
- 返回值:
[full, group1, group2, ...] | none
full
: string - 完整匹配文本groupN
: string | none - 第N个捕获组内容(未匹配时为none
)
- 示例:
regex.capture '(\d+)-(\w+)' '123-abc'
# => ['123-abc', '123', 'abc']
5. regex.captures
- 功能:提取所有匹配的捕获组
- 参数:
pattern
: string - 含捕获组的正则表达式text
: string - 待搜索文本
- 返回值:
[[full, group1, ...], ...]
- 所有匹配的捕获组列表 - 示例:
regex.captures '(\d+)' 'a1b2'
# => [['1'], ['2']]
6. regex.split
- 功能:按正则模式分割文本
- 参数:
pattern
: string - 作为分隔符的正则表达式text
: string - 待分割文本
- 返回值:
[part1, part2, ...]
- 分割后的子字符串列表 - 示例:
regex.split '\s*,\s*' 'a, b, c'
# => ['a', 'b', 'c']
7. regex.replace
- 功能:替换所有匹配项
- 参数:
pattern
: string - 正则表达式replacement
: string - 替换文本(支持$n
捕获组引用)text
: string - 待处理文本
- 返回值:string - 替换后的新字符串
- 示例:
regex.replace '(\d+)' 'number:$1' '123 abc'
# => 'number:123 abc'
8. regex.capture_name
- 功能:提取命名捕获组
- 参数:
pattern
: string - 含命名捕获组的正则(如(?P<name>...)
)text
: string - 待搜索文本names
: boolean (可选) - 是否返回组名(默认false
)
- 返回值:
- 当
names=false
:[group1, group2, ...] | none
- 捕获组值列表(跳过索引0的完整匹配) - 当
names=true
:[[name, value], ...] | none
- 组名和值的配对列表
- 当
- 示例:
# 返回组值
regex.capture_name '(?P<num>\d+)(\w+)' '123abc'
# => ['123', 'abc']
# 返回组名和值
regex.capture_name '(?P<num>\d+)(\w+)' '123abc' true
# => [['num', '123'], [none, 'abc']] // 未命名组显示为 none
通用注意事项
- 正则语法:遵循
regex_lite
规范(轻量级 PCRE 子集) - 转义处理:在 Lumesh 字符串中需双写反斜杠(如
\d
表示数字) - 错误处理:
- 参数非字符串时抛出错误
- 无效正则模式时抛出错误
- 索引规则:所有位置索引均从 0 开始(左闭右开区间)
正则表达式语法参考
遵循标准正则表达式语法,特殊字符需转义:
字符 | 含义 | 示例 |
---|---|---|
. | 任意字符 | a.c 匹配 “abc” |
\d | 数字 [0-9] | \d+ 匹配 “123” |
\w | 单词字符 [a-zA-Z0-9_] | \w+ 匹配 “var1” |
\s | 空白字符 | a\sb 匹配 “a b” |
* | 0次或多次 | a*b 匹配 “b”, “ab”, “aab” |
+ | 1次或多次 | a+b 匹配 “ab”, “aab” |
? | 0次或1次 | a?b 匹配 “b”, “ab” |
{n} | 恰好n次 | a{3} 匹配 “aaa” |
^ | 字符串开始 | ^a 匹配以a开头的字符串 |
$ | 字符串结束 | a$ 匹配以a结尾的字符串 |
[…] | 字符集合 | [aeiou] 匹配任意元音字母 |
[^…] | 非字符集合 | [^0-9] 匹配非数字字符 |
`a | ||
() | 分组 | (ab)+ 匹配 “abab” |
注意:在双引号字符串中需对反斜杠进行转义,例如
\d
应写为"\\d"
, 单引号中无需转义:'\d'
。
高级用法
性能建议
- 对于重复使用的正则表达式,使用
new
预编译并存储结果。 - 优先使用
find
而非match
当只需要部分匹配时。 - 对于简单字符串操作,考虑使用字符串函数而非正则表达式。
错误处理
- 所有函数都会验证参数数量和类型。
- 无效的正则表达式会返回描述性错误。
- 不匹配的情况通常返回
None
而非错误。