从段HTML中取出width,这个标签已经得到,比如img标签。 问题:
这个标签中的width可能写在style里.比如“width:10px”,也可能写成width="10px"。 我的正则表达式是:
(style\s*=\s*("|').*?width\s*:(.*?)(;|"|\s))|(width\s*=\s*("|')(.*?)("|')) 基本上能正常工作,但是有2个问题 问题1:感觉效率比较低。
问题2:如果HTML是下面这样的会得出错误的结果。 <img id="testID" src="test.gif" style="border-width:10px;" /> 哪个大虾能给出高效率的正确的表达式,谢谢了,本人刚接触正则表达式。
这个标签中的width可能写在style里.比如“width:10px”,也可能写成width="10px"。 我的正则表达式是:
(style\s*=\s*("|').*?width\s*:(.*?)(;|"|\s))|(width\s*=\s*("|')(.*?)("|')) 基本上能正常工作,但是有2个问题 问题1:感觉效率比较低。
问题2:如果HTML是下面这样的会得出错误的结果。 <img id="testID" src="test.gif" style="border-width:10px;" /> 哪个大虾能给出高效率的正确的表达式,谢谢了,本人刚接触正则表达式。
Regex rg = new Regex("[^-](?i)(width\\s*[:=]['\"]?\\d*(?:%|px)['\"]?)");匹配
text = "<img id=\"testID\" src=\"test.gif\" style=\"border-width:10px;\" /> ";
rg.IsMatch(text) // falsetext = "<img id=\"testID\" src=\"test.gif\" style=\"width:10px;\" />";
rg.IsMatch(text) // truetext = "<img id=\"testID\" src=\"test.gif\" width=\"100%\" />";
rg.IsMatch(text) // truetext = "<img id=\"testID\" src=\"test.gif\" width='100px' />";
rg.IsMatch(text) //true
MatchCollection matches = Regex.Matches(Regex.Replace(str, "\\s", ""),
"(style=(\".*width:\\d+(px)?;?.*\")|(\'.*width:\\d+(px)?;?.*\'))|(width=(\"\\d+(px)?\")|(\'\\d+(px)?\'))",
RegexOptions.IgnoreCase);
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}