0

我有一个带有非常不干净的 HTML 的字符串。在解析它之前,我想将其转换为:

<TABLE><TR><TD width="33%" nowrap=1><font size="1" face="Arial">
NE
</font> </TD>
<TD width="33%" nowrap=1><font size="1" face="Arial">
DEK
</font> </TD>
<TD width="33%" nowrap=1><font size="1" face="Arial">
143
</font> </TD>
</TR></TABLE>

NE DEK 143因此它更容易解析。我有这个正则表达式(RegexKitLite):

NSString *str = [dataString stringByReplacingOccurrencesOfRegex:@"<TABLE><TR><TD width=\"33%\" nowrap=1><font size=\"1\" face=\"Arial\">(.+?)<\\/font> <\\/TD>(.+?)<TD width=\"33%\" nowrap=1><font size=\"1\" face=\"Arial\">(.+?)<\\/font> <\\/TD>(.+?)<TD width=\"33%\" nowrap=1><font size=\"1\" face=\"Arial\">(.+?)<\\/font> <\\/TD>(.+?)<\\/TR><\\/TABLE>" 
                                                     withString:@"$1 $3 $5"];

我不是正则表达式的专家。有人可以帮我吗?

问候,渡渡鸟

4

3 回答 3

1

Amarghosh 和 bobince,链接问题的获胜回答者,对此通常是正确的。但是,由于您只是在进行消毒,因此正则表达式实际上就可以了。

首先,剥离标签:

s/<.*?>//

然后将所有多余的空格合并为一个:

s/\s+/ /

然后删除前导/尾随空格:

s/^\s+|\s+$//

然后获取值:

^([^ ]+) ([^ ]+) ([^ ]+)$
于 2010-05-03T09:39:38.170 回答
0

我对您的正则表达式可能会失败的原因有一些怀疑(不知道 iPhone SDK 中字符串转义的规则):.在必须匹配换行符的地方使用的点,斜线看起来像是不必要地转义等,

但是:在您的示例中,您尝试提取的文本的特点是没有被标签包围。

因此,搜索所有出现的(?m)^[^<>\r\n]$应该找到所有匹配项。

于 2010-05-03T09:49:23.977 回答
0

如果您确定您的 html 代码层次结构,那么您可以提取由字体标签包围的文本:

Regex r = Regex(@"<\s*font((\s+[^<>]*)|(\s*))>(?<desiredText>[^<>]*)<\s*/\s*font\s*>")
//C# example
foreach(Match m in r.Matches(txt))
   result += m.Groups["desiredText"].Value.Trim()

; 它将是由字体标签包围的文本,边缘没有空白符号。

于 2010-05-03T10:46:21.697 回答