温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

用中文API让正则表达式更易读写的方法是什么

发布时间:2021-10-23 11:41:08 来源:亿速云 阅读:166 作者:iii 栏目:编程语言

这篇文章主要讲解了“用中文API让正则表达式更易读写的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“用中文API让正则表达式更易读写的方法是什么”吧!

Python实现:

标识符:r'\$?[_a-zA-Z\u4e00-\u9fa5][_a-zA-Z0-9\u4e00-\u9fa5]*'   双引号字符串: r'(\")((?<!\\)\\\1|.)*?\1' 字符串插值相关: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 示例

以开头的木兰实现中的几个正则为例,用设想中的 API 表达后进行对比

标识符:

至多一个("$").一个("_", 大小写英文, 中文).任意个("_", 大小写英文, 数字, 中文) 原始正则表达式对比:r'\$?[_a-zA-Z\u4e00-\u9fa5][_a-zA-Z0-9\u4e00-\u9fa5]*'

双引号字符串:

分组(双引号)   .最小匹配(     任意个(       分组(         皆可(           前面不是(反斜杠).一个(反斜杠).一个(引用分组(1)),           一个(非换行字符))       )     )   )   .引用分组(1) r'(\")((?<!\\)\\\1|.)*?\1'

字符串插值相关:

皆可(   一个(反斜杠).一个(左小括号).分组(任意个(不是(反斜杠, 右小括号))).一个(反斜杠).一个(右小括号),   一个(反引号).分组(任意个(不是(反引号))).一个(反引号) ) r'\\\(([^\\\)]*)\\\)|`([^`]*)`'

相对原始正则表达式,在可读性之外还有几个优势:

  • 不需为正则的特殊意义字符加反斜杠,如 \,(,) 等

  • 明确运算优先级,比如双引号字符串中的 | 和 (?<!)...

在易写方面,相对于正则的符号语法,API 语义更加直白。

感谢各位的阅读,以上就是“用中文API让正则表达式更易读写的方法是什么”的内容了,经过本文的学习后,相信大家对用中文API让正则表达式更易读写的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI