def apply(self, string, patt, evaluation, options): "StringMatchQ[string_, patt_, OptionsPattern[%(name)s]]" py_string = string.get_string_value() if py_string is None: return evaluation.message( "StringMatchQ", "strse", Integer1, Expression("StringMatchQ", string, patt), ) re_patt = to_regex(patt, evaluation, abbreviated_patterns=True) if re_patt is None: return evaluation.message("StringExpression", "invld", patt, Expression("StringExpression", patt)) re_patt = anchor_pattern(re_patt) flags = re.MULTILINE if options["System`IgnoreCase"] == SymbolTrue: flags = flags | re.IGNORECASE if re.match(re_patt, py_string, flags=flags) is None: return SymbolFalse else: return SymbolTrue
def compile(self, pattern, evaluation): re_patt = to_regex(pattern, evaluation) if re_patt is None: evaluation.message('StringExpression', 'invld', pattern, Expression('StringExpression', pattern)) return re_patt = anchor_pattern(re_patt) return re.compile(re_patt, flags=re.IGNORECASE)