用于匹配文本的超简单人类可读dsl。

simex的Python项目详细描述


simex是一个让你编写简单的工具,可读取的等价正则表达式,它可以编译成正则表达式。

简单的正则表达式等价物,甚至有可能自己编写。

simex*不是*正则表达式的完全替代品,它的使用不适用于使用正则表达式的任何地方。

它最理想地用于通常要比较两个字符串但有时需要比较的地方两个嵌入模式的字符串。

代码块::python

>;>;来自simex import simex
>;>;simex=simex({"url:r"。*?","anything":r"…*?"})
>;>regex=simex.compile("<;a href={{url}">;{{anything}<;/a>;")
>;>regex.match("<;a href="http://www.cnn.com">;cnn<;/a>;")不是none
true


我必须自己定义所有子正则表达式吗?
-----------------------------


否。simex还包含一个内置的常用正则表达式库。

从simex进口进口simex
>;我国的simex=defaultsimex()
>;regex=我国的simex.compile("<;a>;{{{any}}}<;a>;")
>;从我国的simex.simex=defaultsimex=defaultsimex(
>;>>;regex
r/>re.compile(r'><;r'><;r'>>重新编译(r'><;r'><;a''''''''''''>>><;f)总总总总总总总总总总总总总总总总总总总?)\:\/\/[0-9a-za-z]([-.-w]*[0-9a-za-z])*(:(0-9)*)*(\/?)([A-ZA-Z0-9-\.\?\,\\'\/\\+&;amp;amp;%\$35;_]*)?\ \ gt;*?\<;\/a\>;',re.unicode)

>;>;regex.match("http://www.cnn.com">;cnn<;/a>;")不是none


>可以覆盖现有库中的所有regex,还可以添加更多regex,例如

。代码块::python

>;>;simex=defaultsimex({"url":r"。*?","mycode":r"[a-z][0-9][0-9][0-9]"})


我有冲突!为什么不[[[和]]]?
-----------------------------

{{和}在某些语言中有特殊含义,您可能希望将其与simex一起使用,例如jinja2。

为了防止在这种情况下混淆,您可以定义自己的界限:


。代码块::python

>;>;来自simex import simex
>;>;simex=simex(open_delimeter="[[[",close_delimeter="]])
>;>;simex.compile("<;a href="[[[url">;[[[anything]]]]<;/a>;")
>;>;simex.match("<;a href="http://www.cnn.com">;cnn<;/a>;"")不是none




也就是说,它将产生:

…代码块::python

>;>;来自simex import simex
>;>;simex=simex({"url:r"。*?","anything":r"…*?"})
>;>;regex=simex.compile("'<;a href={{url}">;{{anything}<;/a>;")
>;>;regex
重新编译(r'\<;a\ref\=\"*?\\ &?\<;\/a\>;',re.unicode)
>;>;regex.match("有更多文本")不是none
true


例如:

…代码块::python

>>>>来自simex import simex
>>>simex=simex({"url":r".*?","anything":r"…*?"},exact=true)
>;>;regex=simex.compile(""<;a href="{url}">;{{anything}<;/a>;"")
>;>;regex
重新编译(r'^\<;a\ref\=\"*?\ \ gt;*?\<;\/a\>;$',re.unicode)
>;>regex.match("<;a href="http://www.cnn.com">;cnn<;/a>;")不是none
true
>;>regex.match("<;a href="http://www.cnn.com">;cnn<;/a>;还有更多的文本"")不是none
false


匹配也可以将空白(制表符、空格和换行符)视为可互换的。例如:

…代码块::python

>;>;来自simex import simex
>;>;simex=simex({"url:r"。*?","anything":r"…*?"},flexible_whitespace=true)
>;>regex=simex.compile("<;a href={url}">;{{anything}<;/a>;"")
>;>regex
重新编译(r'\<;a\\s+ref\="。*?\ \ gt;*?\<;\/a\>;',re.unicode)
>;>;regex.match("<;a href="http://www.cnn.com">;cnn<;/a>;")不是none
true

代码块:python如何工作?
---------


正则表达式只是转义整个simexpression,除了由{{和}包围的
组件,它用定义的正则
表达式替换,如dict中定义的"email"或"anything"或"number"。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java向嵌入式Jetty添加多个端点   java如何在JAXWS处理程序中区分请求和响应?   使用Scenebuilder for JAVAFx的登录应用程序的java MVC体系结构   java对话框将不显示   Windows 7上的Java系统变量   java删除动态添加的面板   java将Javadoc嵌入到HTML网站中   带有URL编码数据的java Spring RestTemplate POST请求   java JAXR只运行一次函数   HttpClient缺少java依赖项   java深层反射比较   基于javarmi和CORBA的分布式计算   如何使用当前数据库时间从Java更新MongoDB?   java通过光标保存数据调试时显示错误数据