gpt4 book ai didi

python - 为什么 (?<!index)\.html?无法匹配 'abc.html'

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:14 25 4
gpt4 key购买 nike

m = re.match('(?<!index)\.html?', 'abc.html')
print(m)

无法匹配,在我的内存中它应该工作...我是菜鸟,请帮助我。非常感谢。

最佳答案

re.match包括字符串 anchor 的隐式开始。 (?<!index).不能以 index 开头, 但它不匹配任何不是 index 的东西要么,因此隐式 anchor 意味着这仅有效匹配以 .html? 开头的字符串.

要修复,请使用 re.search而不是 re.match (删除隐式 anchor ),或显式捕获前面的文本(负后视断言仍然排除以 index 结尾的任何内容):

m = re.match('.*(?<!index)\.html?', 'abc.html')  # Use re.fullmatch to prevent arbitrary suffixes
# ^^ added

允许以 index 结尾的事物,但不完全是 index ,您可以使用替代方法:

m = re.match('(?:.{6,}|.{,5}(?<!index))\.html?', 'aindex.html')

如果名称至少有六个字符,我们允许匹配或者它是五个或更少并且它们不是index .

我会注意到,这里的复杂性意味着我倾向于完全跳过正则表达式;纯字符串方法会非常好。例如,假设这只是测试,而不是使用生成的匹配对象,您可以替换:

if re.match('(?:.{6,}|.{,5}(?<!index))\.html?', filename):

无论是:

if filename.endswith(('.htm', '.html')) and filename not in ('index.htm', 'index.html'):

或:

root, ext = os.path.splitext(filename)
if ext in ('.htm', '.html') and root != 'index':

当然它稍微长了一点,但它远没有那么复杂/容易出错。

关于python - 为什么 (?&lt;!index)\.html?无法匹配 'abc.html',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53861345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com