用于匹配文本的超简单人类可读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"。
简单的正则表达式等价物,甚至有可能自己编写。
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
>;从我国的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"。