-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreplacer.py
46 lines (37 loc) · 1.36 KB
/
replacer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# coding: utf-8
import re
class ReplacerError(Exception):
def __init__(self, *args):
if args:
self.message = args[0]
else:
self.message = None
def __str__(self):
if self.message:
return "{0} ".format(self.message)
else:
return "Error has been raised"
class Replacer(object):
def __init__(self, **kwargs):
self.replacer_character = kwargs.get("replacer_character", "*")
self.replace_mode = kwargs.get("replace_mode", "middle")
self.replace_options = {
"middle": r"(?!^|.$)[^\s]",
"default": r"(?!^|.$)(.*)",
"all": r"(.*)",
}
if not kwargs.get("reg_pattern", ""):
raise ReplacerError("Regular expression pattern is missing")
self.set_reg_pattern(kwargs.get("reg_pattern"))
def set_reg_pattern(self, pattern):
self.reg_pattern = pattern
def callback(self, match):
match = match.group(1)
replace_characters = self.replacer_character
if self.replace_mode != "middle":
replace_characters = self.replacer_character * len(match)
return re.sub(
self.replace_options[self.replace_mode], replace_characters, match
)
def replace(self, text):
return re.sub(self.reg_pattern, self.callback, text, flags=re.IGNORECASE)