def to_effect(text): '''Effect の文字列表現を内部形式へ変換する ''' text = text.replace(u'~', u'~') text = text.replace(u'〜', u'~') text = text.replace(u'、', u'') try: if ignore_re.match(text): return None # ランクに関係なく m = rank_regardless_re.match(text) if m: return None # 専用 m = personalized_re.match(text) if m: return None # 条件 condition, effect = parse_condition(text) e = parse_helper.parse_effect(effect) e.condition = condition return unicode(e) except Exception, e: # raise raise Exception(u'パースできませんでした: "' + text + u'", ' + e.message)
def parse_effects(self, td): '''改造の効果をパースする''' result = [] text = ' '.join(td.findAll(text=True)) m = re.findall(ur'\S+\s*[+\-]\s*\d+', text) for s in m: effect = parse_effect(s) result.append(effect) return result
def get_effects(head): effects = [] # かならず「減少/増加」効果がある前提で実装している node = head.findNext(lambda tag: tag.name == 'span' and tag.find(text=re.compile(u'減少|増加'))) if not node: logging.warning(u'効果が存在しません: ' + parse_helper.get_string(head)); return effects for effect in node.parent.findAll('span'): effect = parse_helper.parse_effect(parse_helper.get_string(effect)) if effect: effects.append(effect) return effects