1 # coding:utf-8
2
3 class TidyText(object):
4 def __init__(self,string='',begin='',last=''):
5 super(TidyText,self).__init__()
6 self.result=string
7 self.begin=begin
8 self.last=last
9 self.tags={
10 '<a': '</a>',
11 '<table': '</table>',
12 '<tr': '</tr>',
13 '<td': '</td>',
14 '<p': '</p>',
15 '<font': '</font>',
16 '<div': '</div>',
17 '<span': '</span>',
18 '<tbody': '</tbody>',
19 '<img': '</img>',
20 '<script': '</script>',
21 '<strong': '</strong>',
22 '<br': '</br>',
23 '<h': '</h>',
24 '<form': '</form>',
25 '<frame': '</frame>',
26 '<li': '</li>',
27 '<ul': '</ul>',
28 '<dd': '</dd>',
29 '<dt': '</dt>',
30 '<iframe': '</iframe>',
31 '<sub': '</sub>',
32 '<A': '</A>',
33 '<TABLE': '</TABLE>',
34 '<TR': '</TR>',
35 '<TD': '</TD>',
36 '<P': '</P>',
37 '<FONT': '</FONT>',
38 '<DIV': '</DIV>',
39 '<SPAN': '</SPAN>',
40 '<TBODY': '</TBODY>',
41 '<IMG': '</IMG>',
42 '<SCRIPT': '</SCRIPT>',
43 '<STRONG': '</STRONG>',
44 '<BR': '</BR>',
45 '<H': '</H>',
46 '<FORM': '</FORM>',
47 '<FRAME': '</FRAME>',
48 '<LI': '</LI>',
49 '<UL': '</UL>',
50 '<DD': '</DD>',
51 '<DT': '</DT>',
52 '<IFRAME': '</IFRAME>',
53 '<SUB': '</SUB>',
54 '<a': '</a>',
55 '<table': '</table>',
56 '<tr': '</tr>',
57 '<td': '</td>',
58 '<p': '</p>',
59 '<font': '</font>',
60 '<div': '</div>',
61 '<span': '</span>',
62 '<tbody': '</tbody>',
63 '<img': '</img>',
64 '<script': '</script>',
65 '<strong': '</strong>',
66 '<br': '</br>',
67 '<h': '</h>',
68 '<form': '</form>',
69 '<frame': '</frame>',
70 '<li': '</li>',
71 '<ul': '</ul>',
72 '<dd': '</dd>',
73 '<dt': '</dt>',
74 '<iframe': '</iframe>',
75 '<sub': '</sub>',
76 '<A': '</A>',
77 '<TABLE': '</TABLE>',
78 '<TR': '</TR>',
79 '<TD': '</TD>',
80 '<P': '</P>',
81 '<FONT': '</FONT>',
82 '<DIV': '</DIV>',
83 '<SPAN': '</SPAN>',
84 '<TBODY': '</TBODY>',
85 '<IMG': '</IMG>',
86 '<SCRIPT': '</SCRIPT>',
87 '<STRONG': '</STRONG>',
88 '<BR': '</BR>',
89 '<H': '</H>',
90 '<FORM': '</FORM>',
91 '<FRAME': '</FRAME>',
92 '<LI': '</LI>',
93 '<UL': '</UL>',
94 '<DD': '</DD>',
95 '<DT': '</DT>',
96 '<IFRAME': '</IFRAME>',
97 '<SUB': '</SUB>',
98 }
99 self.fulltag=True
100 self.reservetags={} # '<a':0 仅仅删除 <a...>, '<a':'</a>' 删除全部
101
102 self.junk=[' ''\r','\n','\t']
103 self.reservejunk=[]
104 self.dels=[]
105
106 def gets(self):
107 self.check() #检查输入string是否是字符串格式
108 self.tidytags()
109 return self.result
110
111 def check(self):
112 if type(self.result)!=type(''):
113 return 'type error, str is needed'
114 else:
115 self.result=self.get(self.result,self.begin,self.last,cycle=0,include=0)[0]
116
117 def tidytags(self):
118 if len(self.reservetags)>0:
119 #从总taqg list里除去这部分要保留的.
120 for tag in list(self.reservetags.keys()):
121 try:
122 self.tags.pop(tag)
123 except Exception as e:
124 print(u'保留字符串不存在')
125 pass
126 #保留字符串处理:
127 for ktag,vtag in list(self.reservetags.items()):
128 if vtag==0:
129 self.result=self.removehtml(self.result,ktag,'>')
130 elif vtag==-1:
131 pass
132 else:
133 self.result=self.removehtml(self.result,ktag,vtag)
134 #全局字符串处理
135 for ktag,vtag in list(self.tags.items()):
136 if self.fulltag==True:
137 self.result=self.removehtml(self.result,ktag,vtag)
138 else:
139 self.result = self.removehtml(self.result, ktag, '>')
140 #垃圾字符串处理
141 if len(self.reservejunk)>0:
142 for junk in self.reservejunk:
143 try:
144 self.junk.remove(junk)
145 except Exception as e:
146 print('垃圾字符串不存在')
147 pass
148 for removejunk in self.junk:
149 self.result.replace(removejunk,'')
150 #字定义额外字符串删除:
151 if len(self.dels)>0:
152 for i in self.dels:
153 self.result.replace(i,'')
154
155 def removehtml(self,string,begin,last):
156 s=string
157 rem=self.get(s,begin,last,cycle=1,include=1)
158 if len(rem)>1:
159 for i in rem:
160 s=s.replace(i,'')
161 return s
162
163 def get(self,string, begin, last, cycle=0, include=0):
164 if type(string) == type(''):
165 if cycle == 0:
166 startpoint = string.find(begin)
167 endpoint = startpoint + len(begin) + string[startpoint + len(begin):].find(last)
168 if startpoint < 0 or endpoint < 0: # 找不到开头或者结尾,直接返回
169 print(u'首尾字符串找不到')
170 return [string]
171 if include == 0:
172 return [string[startpoint + len(begin):endpoint]]
173 else:
174 return [begin + string[startpoint + len(begin):endpoint] + last]
175 elif cycle == 1:
176 records = []
177 x = string
178 while x.find(begin) >= 0:
179 startpoint = x.find(begin)
180 endpoint = startpoint + len(begin) + x[startpoint + len(begin):].find(last)
181 if startpoint < 0 or endpoint < 0: # 找不到开头或者结尾,直接返回
182 print(u'首尾字符串找不到')
183 return [string]
184 if include == 0:
185 records.append(x[startpoint + len(begin):endpoint])
186 else:
187 records.append(begin + x[startpoint + len(begin):endpoint] + last)
188 x = x[endpoint + len(last):]
189 return records
190 else:
191 return ['error:not string type']