[英]Regular Expression doesn't match
我有一個非常不干凈的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的專家。 有人可以幫我嗎?
問候,渡渡鳥
Amarghosh和bobince是鏈接問題的獲獎者,對此大體上是正確的。 但是,由於您只是在進行衛生處理,因此正則表達式實際上還不錯。
首先,剝離標簽:
s/<.*?>//
然后將所有多余的空間折疊成一個:
s/\s+/ /
然后刪除前導/后綴空間:
s/^\s+|\s+$//
然后獲取值:
^([^ ]+) ([^ ]+) ([^ ]+)$
我對為什么您的正則表達式可能會失敗(我不知道iPhone SDK中的字符串轉義規則)有一些懷疑:點.
用在必須與換行符匹配的地方,斜杠看起來像是不必要的轉義,等等。
但是:在您的示例中,您要提取的文本的特征是不被標簽包圍。
因此,搜索所有出現的(?m)^[^<>\\r\\n]$
都將找到所有匹配項。
如果您確定自己的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()
; 它是由字體標簽包圍的文本,邊緣沒有空格符號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.