正则表达式删除终结线空间模式

时间:2011-10-03 23:05:23

标签: javascript python regex

我有一个网站更新程序,将每个 p 元素转换为textarea,用户在内容中键入,然后每个textarea转换回 p &我抓住了最终的HTML&将它存储在我的SQL数据库中。

我的问题:在Internet Explorer中,当我再次抓取HTML时,它稍微更改了html。例如:

// From this originally
<img id="headingpic"/><div id="myContent">  

// To this
<img id="headingpic"/>
<div id="myContent">

这很重要,因为现在展出的img&amp; amp;下面的div。

有时IE会插入一个“\ n”,有时它会是“\ n”,有时它只是一个“\ n”。我试图想出一个正则表达式来移除这些终点线(&amp; spacing),无论它们的模式如何。我对正则表达式有很多困难,它们对我来说似乎很神秘。

如果我解释我的算法,你可以建议在正则表达式中实现这一点的“角色”吗?

  • 每个“&gt;” character:如果下一个字符是“&lt;”,则忽略任何WHITEPACE或ENDLINE CHARACTER然后继续
  • 对于“&lt;”后面的每个字符如果不是==“&gt;”删除它(或将其替换为“”)

我试图在javascript或python中执行此操作:

# Python: should I use replace for this? Would my regular expression look something like this?
HTML_CONTENT.replace( "^[ \t\n\r]" ) # this removes all whitespace as far as I know

2 个答案:

答案 0 :(得分:0)

我会以不同的方式解决这个问题:

首先按线溢出。

html_content_list = HTML_CONTENT.split("\n"); // Split by line;

然后用.trim()删除末尾的所有空格(假设我们正在讨论字符串,每行一行,首先测试null)

for(var i in html_content_list)
{
    html_content_list[i] = html_content_list[i].trim();
}

然后,如果它确实需要一个新行,最后添加它:

html_content_list.join("\n");

答案 1 :(得分:0)

你的正则表达式需要更多的字符,或者\ s:

HTML_CONTENT.replace( "^[ \t\n\r\f\v]" )

或者

HTML_CONTENT.replace( "^[\s]" )
  

\ v匹配垂直制表符\ u000B。

     

\ f匹配换页符\ u000C。


我一开始误解了这个问题,但这就是你如何做到这一点python:

import re
HTML_CONTENT = """\
<img id="headingpic"/> abcdef
qwerty..??,ksjhe173((:$
<div id="myContent">
"""

print re.sub(">[^<]*<", "><", HTML_CONTENT)

输出:

<img id="headingpic"/><div id="myContent">  

或者,如果您只想删除空格和换行符:

import re
HTML_CONTENT = """\
<img id="headingpic"/>

<div id="myContent">
"""

print re.sub(">[\s]*<", "><", HTML_CONTENT)

输出:

<img id="headingpic"/><div id="myContent">