import re daterange_re = "\\b((?P(?Pjan|january|feb|february|mar|march|apr|april|may|jun|june|jul|july|aug|august|sep|sept|september|oct|october|nov|november|dec|december)[,\\s]+(?P\\d|[12]\\d|3[01])(?:[-\\s]*(?:st|nd|rd|th))?(?P)|(?P\\d|[12]\\d|3[01])(?:[-\\s]*(?:st|nd|rd|th))?[,\\s]+(?Pjan|january|feb|february|mar|march|apr|april|may|jun|june|jul|july|aug|august|sep|sept|september|oct|october|nov|november|dec|december)(?P))((?P\\s*(-+|&+|,|and|to|until|thru|through|\\.\\s*(\\.\\s*)+)\\s*)(?P(?Pjan|january|feb|february|mar|march|apr|april|may|jun|june|jul|july|aug|august|sep|sept|september|oct|october|nov|november|dec|december)[,\\s]+(?P\\d|[12]\\d|3[01])(?:[-\\s]*(?:st|nd|rd|th))?(?P)|(?P\\d|[12]\\d|3[01])(?:[-\\s]*(?:st|nd|rd|th))?[,\\s]+(?Pjan|january|feb|february|mar|march|apr|april|may|jun|june|jul|july|aug|august|sep|sept|september|oct|october|nov|november|dec|december)(?P)))?(?P)|(?Pjan|january|feb|february|mar|march|apr|april|may|jun|june|jul|july|aug|august|sep|sept|september|oct|october|nov|november|dec|december)\\s+(?P(?P\\d|[12]\\d|3[01])(?:[-\\s]*(?:st|nd|rd|th))?(?P\\s*(-+|&+|,|and|to|until|thru|through|\\.\\s*(\\.\\s*)+)\\s*)(?P\\d|[12]\\d|3[01])(?:[-\\s]*(?:st|nd|rd|th))?)(?P)|(?P(?P\\d|[12]\\d|3[01])(?:[-\\s]*(?:st|nd|rd|th))?(?P\\s*(-+|&+|,|and|to|until|thru|through|\\.\\s*(\\.\\s*)+)\\s*)(?P\\d|[12]\\d|3[01])(?:[-\\s]*(?:st|nd|rd|th))?)\\s+(?Pjan|january|feb|february|mar|march|apr|april|may|jun|june|jul|july|aug|august|sep|sept|september|oct|october|nov|november|dec|december)(?P))(\\s+|\\s*[,.]\\s*)(?P\\d\\d\\d\\d|'?\\d\\d)((?=\\D)|$)" ## The following line segfaults: re.compile (daterange_re, re.IGNORECASE).match ('December 20, 1997')