木兰编程语言重现项目中用到了不少正则表达式,其中不乏不那么一目了然的(Python实现):
标识符:r'$?[_a-zA-Z一-龥][_a-zA-Z0-9一-龥]*'
双引号字符串: r'(")((?
由此想到是否有 API 能够构建正则表达式。找到 PythonVerbalExpressions,它首页上一个示例如下:
verbal_expression.
start_of_line().
find('http').
maybe('s').
find('://').
maybe('www.').
anything_but(' ').
end_of_line()
对应正则: ^(http)(s)?(://)(www.)?([^ ]*)$
看起来的确比较可读,而且如果改为中文 API 的话,命名会更简短:
开头().
寻找('http').
或许('s').
寻找('://').
或许('www.').
除了(' ').
结尾()
问题是这个库的功能似乎有限,仅支持小部分正则语法,于是考虑改进。
以开头的木兰实现中的几个正则为例,用设想中的 API 表达后进行对比
标识符:
至多一个("#34;).一个("_", 大小写英文, 中文).任意个("_", 大小写英文, 数字, 中文)
原始正则表达式对比:r'$?[_a-zA-Z一-龥][_a-zA-Z0-9一-龥]*'
双引号字符串:
分组(双引号)
.最小匹配(
任意个(
分组(
皆可(
前面不是(反斜杠).一个(反斜杠).一个(引用分组(1)),
一个(非换行字符))
)
)
)
.引用分组(1)
r'(")((?
字符串插值相关:
皆可(
一个(反斜杠).一个(左小括号).分组(任意个(不是(反斜杠, 右小括号))).一个(反斜杠).一个(右小括号),
一个(反引号).分组(任意个(不是(反引号))).一个(反引号)
)
r'\(([^\)]*)\)|`([^`]*)`'
相对原始正则表达式,在可读性之外还有几个优势:
在易写方面,相对于正则的符号语法,API 语义更加直白。
欢迎意见建议。
页面更新:2024-03-28
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号