在 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
请注意,您当前的正则表达式不起作用,因为您对要查找的字符串使用了负先行。这是一个有效的方法:
考虑到 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
请注意,您当前的正则表达式不起作用,因为您对要查找的字符串使用了负先行。这是一个有效的方法: