我有一个非常不干净的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"];
我不是Regex的专家。有人可以帮助我吗?
问候,渡渡鸟
答案 0 :(得分:1)
首先,剥离标签:
s/<.*?>//
然后将所有多余的空格折叠成一个:
s/\s+/ /
然后删除前导/尾随空格:
s/^\s+|\s+$//
然后获取值:
^([^ ]+) ([^ ]+) ([^ ]+)$
答案 1 :(得分:0)
我有一些怀疑为什么你的正则表达式可能会失败(不知道iPhone SDK中字符串转义的规则):点.
用于必须匹配换行符的地方,斜线看起来像它不必要地逃脱等等。
但是:在您的示例中,您尝试提取的文本的特征是没有被标记包围。
因此,搜索(?m)^[^<>\r\n]$
的所有出现都应找到所有匹配项。
答案 2 :(得分:0)
如果你确定你的html代码层次结构,那么你可以只提取font-tags包含的文本:
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()
它将是由font-tags包围的文本,边缘没有空格符号。