在 Python 中使用正则表达式删除名称末尾带有 "expn" 的 MongoDB 数据库

Using Regex in Python to Delete MongoDB databases with "expn" at end of name

考虑到 Whosebug 上关于正则表达式的问题数量,我很抱歉再添加一个,但我似乎无法找出脚本中的错误。它应该 运行 遍历我数据库中的所有集合,并根据它们末尾是否包含字符串“_Clean”采取有条件的操作。

我很确定我使用了错误的正则表达式。

from pymongo import MongoClient
from bson.son import SON
import re

db = MongoClient().guns
pattern = re.compile("(?!)(_Clean)\Z")

for collection in db.collection_names():
    if pattern.match(str(collection)):
        print(str(collection))
        print("No, I should be dropped")
    else:
        print("Yay, I am clean")
        print(str(collection))

我收到的输出是:

Yay, I am clean
Accidental_Injuries_Clean
Yay, I am clean
Massshootings_Clean
Yay, I am clean
Accidental_Injuries_Teens_Clean
Yay, I am clean
Officer_Involved_Shootings_Clean
Yay, I am clean
Accidental_Deaths_Children
Yay, I am clean
Accidental_Injuries_Children_Clean
Yay, I am clean

非常感谢大家抽出宝贵时间,非常感谢您提供的任何建议。

我认为您在这里真的不需要正则表达式。您可以只使用基本的字符串切片:

dbs = ['Accidental_Injuries_Clean',
'Massshootings_Clean',
'Accidental_Injuries_Teens_Clean',
'Officer_Involved_Shootings_Clean',
'Accidental_Deaths_Children',
'Accidental_Injuries_Children_Clean']

for db in dbs:
  if db[-6:] == '_Clean':
    print('Delete: ', db)

输出:

Delete:  Accidental_Injuries_Clean
Delete:  Massshootings_Clean
Delete:  Accidental_Injuries_Teens_Clean
Delete:  Officer_Involved_Shootings_Clean
Delete:  Accidental_Injuries_Children_Clean

请注意,您当前的正则表达式不起作用,因为您对要查找的字符串使用了负先行。这是一个有效的方法:

^.*_Clean$