saa*_*laa 9 python regex string
我目前正在构建一个必须将文件名与模式匹配的工具.为方便起见,我打算提供延迟匹配(以类似glob的方式)和regexp匹配.例如,以下两个片段最终会产生相同的效果:
@mylib.rule('static/*.html')
def myfunc():
pass
@mylib.rule(r'^static/([^/]+)\.html')
def myfunc():
pass
Run Code Online (Sandbox Code Playgroud)
AFAIK r''仅对Python解析器有用,它实际上str在解析后创建了一个标准实例(唯一的区别在于它保留了\).
有人知道一种方法来告诉彼此吗?
我不想为同一目的提供两个备用装饰器,或者更糟糕的是,手动解析字符串以确定它是否是正则表达式.
Sve*_*ach 13
你无法区分它们.每个原始字符串文字也可以写为标准字符串文字(可能需要更多引用),反之亦然.除此之外,我肯定会给两个装饰者添加不同的名字.他们不做同样的事情,他们做不同的事情.
示例(CPython):
>>> a = r'^static/([^/]+)\.html'; b = '^static/([^/]+)\.html'
>>> a is b
True
Run Code Online (Sandbox Code Playgroud)
因此,在此特定示例中,原始字符串文字和标准字符串文字甚至会产生相同的字符串对象.
kin*_*all 11
您无法判断字符串是否在事后被定义为原始字符串.就个人而言,我实际上会使用一个单独的装饰器,但如果你不想,你可以使用一个命名参数(例如@rule(glob="*.txt")用于globs和@rule(re=r".+\.txt")regex).
或者,如果用户想要使用正则表达式,则要求用户提供已编译的正则表达式对象,例如@rule(re.compile(r".+\.txt"))- 这很容易检测,因为它的类型不同.