字符串处理

  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             '&lt;a': '&lt;/a&gt;',
 55             '&lt;table': '&lt;/table&gt;',
 56             '&lt;tr': '&lt;/tr&gt;',
 57             '&lt;td': '&lt;/td&gt;',
 58             '&lt;p': '&lt;/p&gt;',
 59             '&lt;font': '&lt;/font&gt;',
 60             '&lt;div': '&lt;/div&gt;',
 61             '&lt;span': '&lt;/span&gt;',
 62             '&lt;tbody': '&lt;/tbody&gt;',
 63             '&lt;img': '&lt;/img&gt;',
 64             '&lt;script': '&lt;/script&gt;',
 65             '&lt;strong': '&lt;/strong&gt;',
 66             '&lt;br': '&lt;/br&gt;',
 67             '&lt;h': '&lt;/h&gt;',
 68             '&lt;form': '&lt;/form&gt;',
 69             '&lt;frame': '&lt;/frame&gt;',
 70             '&lt;li': '&lt;/li&gt;',
 71             '&lt;ul': '&lt;/ul&gt;',
 72             '&lt;dd': '&lt;/dd&gt;',
 73             '&lt;dt': '&lt;/dt&gt;',
 74             '&lt;iframe': '&lt;/iframe&gt;',
 75             '&lt;sub': '&lt;/sub&gt;',
 76             '&lt;A': '&lt;/A&gt;',
 77             '&lt;TABLE': '&lt;/TABLE&gt;',
 78             '&lt;TR': '&lt;/TR&gt;',
 79             '&lt;TD': '&lt;/TD&gt;',
 80             '&lt;P': '&lt;/P&gt;',
 81             '&lt;FONT': '&lt;/FONT&gt;',
 82             '&lt;DIV': '&lt;/DIV&gt;',
 83             '&lt;SPAN': '&lt;/SPAN&gt;',
 84             '&lt;TBODY': '&lt;/TBODY&gt;',
 85             '&lt;IMG': '&lt;/IMG&gt;',
 86             '&lt;SCRIPT': '&lt;/SCRIPT&gt;',
 87             '&lt;STRONG': '&lt;/STRONG&gt;',
 88             '&lt;BR': '&lt;/BR&gt;',
 89             '&lt;H': '&lt;/H&gt;',
 90             '&lt;FORM': '&lt;/FORM&gt;',
 91             '&lt;FRAME': '&lt;/FRAME&gt;',
 92             '&lt;LI': '&lt;/LI&gt;',
 93             '&lt;UL': '&lt;/UL&gt;',
 94             '&lt;DD': '&lt;/DD&gt;',
 95             '&lt;DT': '&lt;/DT&gt;',
 96             '&lt;IFRAME': '&lt;/IFRAME&gt;',
 97             '&lt;SUB': '&lt;/SUB&gt;',
 98         }
 99         self.fulltag=True
100         self.reservetags={}     # '<a':0 仅仅删除 <a...>,  '<a':'</a>' 删除全部
101 
102         self.junk=['&nbsp;''
','
','	']
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']
原文地址:https://www.cnblogs.com/pythonClub/p/9854381.html