Парсинг заголовка - сложная часть, похоже, вы сами можете обработать даты и т.д. Проблема в том, что не существует одного правила, которое может анализировать каждый заголовок, но существует много правил, и вы можете только догадываться, какое из них работает с конкретным заголовком.
Обычно я справляюсь с этим, создавая список правил, от самых специфических до общих, и пробую их по одному, пока не совпадет одно из них.
Для написания таких правил вы можете использовать модуль re
или даже pyparsing .
Общая идея выглядит так:
class CantParse(Exception):
pass
# one rule to parse one kind of title
import re
def title_with_special( title ):
""" accepts only a title of the form
<text> #<issue> (<special>) """
m = re.match(r"[^#]*#(\d+) \(([^)]+)\)", title)
if m:
return m.group(1), m.group(2)
else:
raise CantParse(title)
def parse_extra(title, rules):
""" tries to parse extra information from a title using the rules """
for rule in rules:
try:
return rule(title)
except CantParse:
pass
# nothing matched
raise CantParse(title)
# lets try this out
rules = [title_with_special] # list of rules to apply, add more functions here
titles = ["Stan Lee's Traveler #12 (10 Copy Incentive Cover)",
"Betrayal Of The Planet Of The Apes #1 (Of 4)(25 Copy Incentive Cover) )"]
for title in titles:
try:
issue, special = parse_extra(title, rules)
print "Parsed", title, "to issue=%s special='%s'" % (issue, special)
except CantParse:
print "No matching rule for", title
Как видите, первый заголовок анализируется правильно, но не второй. Вам нужно будет написать набор правил, учитывающих каждый возможный формат заголовка в ваших данных.