使用Python3.3我试图制作一些正则表达式替代品,但没有成功。在
我想去掉td标记的所有属性,除了rowspan属性(末尾的示例td)。在
当rowspan存在时,我可以使用以下命令成功替换:re.sub('(
]*([\\s]rowspan[\\s]*=[\\s]*[0-9]*)[^>]*(>)', handle_td, file_contents)其中handle_td是:
^{pr2}$
但我还想处理剩下的td,这是我没有做到的。在
如果我在第二个组之后添加?,它将td标记更改为,并且不保留rowspan属性。在
我做错什么了?我该怎么解决这个问题?
我没有运行另一个命令来处理另一个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]*
[\\s]*', '', file_contents)