python爬虫類の各種日付フォーマットの解析


爬虫類に遭遇した日付のフォーマットが多すぎて、日付のフォーマットを統計します.
2018-6-21、2018年6月21、2018/6/21、21 st Jun、2018、Jun 21 st、2018(他の月であれば略語の形式がある)、Jun 212018、21-22 Jun 2018、Jun 21-220218、Thursday、21 Jun 2018(曜日でも略語がある可能性があります)、また未収録は日期フォーマットを統一するために解析が必要です.ネット上のチュートリアルが少なすぎて、自分でゆっくりと蓄積しました.
import re

class DateFormatHelper(object):
    regex1 = re.compile(r"[0-9]{1,2}-[0-9]{1,2} *[A-Za-z]+ *[0-9]{4}")
    regex2 = re.compile(r"[0-9]{1,2} *[A-Za-z]+ *[0-9]{4}")
    regex3 = re.compile(r"[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}")
    regex4 = re.compile(r"[A-Za-z]+ *[0-9]{1,2}, *[0-9]{4}")
    regex5 = re.compile(r"[A-Za-z]+ *[0-9]{1,2}-[0-9]{1,2}, *[0-9]{4}")
    regex6 = re.compile(r"[0-9]{4} [0-9]{1,2} [0-9]{1,2} ")
    dateformatregexs = [regex1, regex2, regex3, regex4, regex5, regex6]

    monthMap = {"sep": "9", "oct": "10", "nov": "11", "dec": "12", "jan": "1", "feb": "2",
                "aug": "8", "jul": "7", "jun": "6", "may": "5", "apr": "4", "mar": "3"}
    monthMap2 = {"September": "9", "October": "10", "November": "11", "December": "12",
                 "January": "1", "February": "2", "August": "8", "July": "7",
                 "June": "6", "May": "5", "April": "4", "March": "3"}
    @classmethod
    def convertStandardDateFormat(cls, datestr: str) -> str:
        """
              
        :param datestr:
        :return:
        """
        res = ""
        if datestr is None:
            return res
        for i in range(0, len(cls.dateformatregexs)):
            try:
                regex = cls.dateformatregexs[i]
                match = regex.match(datestr)
                if match is not None:
                    itemstr = match.group()
                    if i == 0:
                        items = str(itemstr).split(" ")
                        year = items[len(items) - 1]
                        month = cls.monthMap.get(str(items[1]).lower())
                        if month is None:
                            month = cls.monthMap2.get(str(items[1]))
                        dayrange = str(items[0])
                        day = dayrange[0:dayrange.index("-")]
                        day2 = dayrange[dayrange.index("-") + 1:]
                        res = year + "-" + month + "-" + day
                        # res2 = year + "-" + month + "-" + str(day2)
                    elif i == 1:
                        items = str(itemstr).split(" ")
                        year = items[len(items) - 1]
                        month = cls.monthMap.get(str(items[1]).lower())
                        if month is None:
                            month = cls.monthMap2.get(str(items[1]))
                        day = items[0]
                        res = year + "-" + month + "-" + day
                    elif i == 3:
                        items = str(itemstr).split(" ")
                        year = items[len(items) - 1]
                        month = cls.monthMap.get(str(items[0]).lower())
                        if month is None:
                            month = cls.monthMap2.get(str(items[0]))
                        digit_pattern = re.compile(r'[0-9]+')
                        digitlist = digit_pattern.findall(items[1])
                        day = digitlist[0]
                        res = year + "-" + month + "-" + day
                    elif i == 4:
                        items = str(itemstr).split(" ")
                        year = items[len(items) - 1]
                        month = cls.monthMap.get(str(items[0]).lower())
                        if month is None:
                            month = cls.monthMap2.get(str(items[0]))
                        dayrange = str(items[1])
                        day = dayrange[0:dayrange.index("-")]
                        # day2 = dayrange[dayrange.index("-")+1:dayrange.index(",")]
                        res = year + "-" + month + "-" + day
                        # res2 = year + "-" + month + "-" + day2
                    elif i == 5:
                        for x in range(len(str(itemstr))):
                            if ord(itemstr[x]) > 255:
                                itemstr = itemstr.replace(itemstr[x], " ")
                        items = str(itemstr).split(" ")
                        year = items[0]
                        month = items[1]
                        day = items[2]
                        res = year + "-" + month + "-" + day
                    else:
                        res = datestr
                    print(res)
                    break
            except Exception as e:
                print("convertStandardDateFormat      {}".format(e))
        return res

注釈はあまり書いていません.いいえ、注釈を書いていません.この習慣は変わっています.考えてみれば、日付フォーマットの文字列を
convertStandardDateFormat()

この関数は,もちろん正確には必要に応じてこのclassmethod関数を呼び出す.次に、この関数は、日付文字列がどの所定の日付フォーマットに合致するかを識別します.あとはやりやすくて、どれが年で、どれが月で、どれが日なのかを知って、それから簡単に代えることができます.ええと、このプログラムは今のところわずかなフォーマットしか解析できませんので、ネット上に置いて、見ている人が解析を続けることを望んでいます.もしあなたたちが書いた解析プログラムの住所をどこで返事することができたら、私は転載して改善を続けます.初心者が出発して、問題があったら伝言を残して、噴き出さないでください...