Python 3.3を使用して、正規表現の代用を作成しようとして失敗しました。
td
属性を除くタグのすべての属性を削除したいrowspan
(最後のtdの例)。
rowspan
次のコマンドを使用すると、存在する場合に正常に置換できます。
re.sub('(<td)[^>]*([\\s]rowspan[\\s]*=[\\s]*[0-9]*)[^>]*(>)', handle_td, file_contents)
どこにhandle_td
ある:
def handle_td(matchobj):
new_td = ''
for curr_group in matchobj.groups(''):
if curr_group != '':
new_td += curr_group
return new_td
td
しかし、私は残りの's の世話もしたいと思います。これは私が管理しませんでした。
2 番目のグループの後に追加すると、td タグが変更され、属性?
が保持されません。rowspan
私は何を間違っていますか?どうすればこれを修正できますか?
他のコマンドを処理するために別のコマンドを実行することtd
はありませんが、管理しませんでした...
<td width=307 valign=top style='width:230.3pt;border:solid windowtext 1.0pt; border-left:none;padding:0cm 5.4pt 0cm 5.4pt'>
<td width=307 rowspan=4 style='width:230.3pt;border:solid windowtext 1.0pt; border-top:none;padding:0cm 5.4pt 0cm 5.4pt'>
<td width=307 valign=top style='width:230.3pt;border-top:none;border-left: none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; padding:0cm 5.4pt 0cm 5.4pt'>
これにより、次が生成されます。
<td>
<td rowspan=4>
<td>
私はこの方法で管理しました(より良い方法がある場合は、自由に追加してください):
# Leave only specific attributes for td tags
def filter_td_attributes(matchobj):
if matchobj.group(1) == "rowspan":
return matchobj.group(1) + '=' + matchobj.group(2)
# Loop the attributes of the td tags
def handle_td(matchobj):
new_td = re.sub("([a-zA-Z]+)[\\s]*=[\\s]*([a-zA-Z0-9:;.\\-'\\s]*)([\\s]|>)", filter_td_attributes, matchobj.group(0))
new_td = re.sub("[\\s]*$", '', new_td)
new_td = new_td + ">" # close the td tag
return new_td
file_contents = re.sub('[\\s]*</p>[\\s]*</td>', '</td>', file_contents)