正则表达式去除行末空格模式

3
我有一个网站更新程序,它将每个p元素转换为文本框,用户输入内容后,每个文本框都会转换回p,然后我获取结果HTML并将其存储在我的SQL数据库中。 我的问题:在Internet Explorer浏览器中,当我尝试重新获取HTML时,它稍微改变了HTML。例如:
// From this originally
<img id="headingpic"/><div id="myContent">  

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

这很重要,因为现在显示的图片和下面的div之间有一个垂直间隙。

有时候IE会插入"\n ",有时候是" \n",有时候只是"\n"。我正在尝试想出一个正则表达式来删除这些换行符和空格,无论它们的模式是什么。我非常困难地想出了正则表达式,它们对我来说似乎很神秘。

如果我解释我的算法,你能建议一下正则表达式中实现这一点的“字符”吗?

  • 对于每个">"字符:忽略任何空格或换行符,如果下一个字符是"<",则继续
  • 对于"<"后面的每个字符,如果它不等于">",则删除它(或将其替换为"")

我正在尝试在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
我会用不同的方式来处理这个问题:
首先按行分割。
html_content_list = HTML_CONTENT.split("\n"); // Split by line;

然后使用.trim()删除结尾的所有空格(假设我们谈论的是字符串且每行只有一个,先测试其是否为空)

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

然后,如果它确实需要一个新行,请在末尾添加:

html_content_list.join("\n");

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">

谢谢:这个代码是识别">"字符然后删除空格和格式字符吗?还是无论在哪里都删除所有的格式字符? - sazr
更新的答案。我一开始可能误解了问题。您是想在"><"之间完全没有字符,还是只是删除"><"之间的空格和换行符? - chown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接