Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re
- import itertools
- def inject_substring(string, substring):
- sections = []
- for char in string:
- sections.append(char)
- sections.append(substring)
- sections.pop()
- return "".join(sections)
- def permutations_with_repetition(iterable, r=None):
- for unique in set(itertools.permutations(iterable, r)):
- yield unique
- def anchored_permutation(string):
- if len(string) < 3:
- yield [string]
- else:
- first = string[0]
- last = string[-1]
- for permutation in permutations_with_repetition(string[1:-1]):
- permutation_str = "".join(permutation)
- yield "".join((first, permutation_str, last))
- def regex_permutations(string, delims, max_delims):
- sub_pattern = "[{d}]{{0,{m}}}".format(d=delims,m=max_delims)
- for string_permutation in anchored_permutation(string):
- yield inject_substring(string_permutation, sub_pattern)
- def compiled_permutations(string, delims, max_delims):
- permutations = regex_permutations(string, delims, max_delims)
- for permutation in permutations:
- yield re.compile(permutation)
- def generate_pattern_list(wordlist, delims, max_delims):
- patternlist = []
- for word in wordlist:
- for pattern in compiled_permutations(word, delims, max_delims):
- patternlist.append(pattern)
- return patternlist
- def is_profane(msg, patternlist):
- for pattern in patternlist:
- matches = pattern.search(msg)
- if matches is not None:
- return True
- return False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement