首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

抢分咯!简单正则表达式有关问题(已有部分代码)

2012-04-10 
抢分咯!简单正则表达式问题(已有部分代码)!我要从aspx文件中提取所有的服务器控件(包括控件的ID、类型、Name

抢分咯!简单正则表达式问题(已有部分代码)!
我要从aspx文件中提取所有的服务器控件(包括控件的ID、类型、Name属性(存在的情况下),如果是input类型的控件,还要提取type属性的值)

现在已经实现了提取服务器控件的Id、类型的提取,代码如下:

源文件字符串:
<%@   Page   Language= "VB "   AutoEventWireup= "false "   CodeFile= "Default.aspx.vb "   Inherits= "_Default "   %>

<!DOCTYPE   html   PUBLIC   "-//W3C//DTD   XHTML   1.0   Transitional//EN "   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">

<html   xmlns= "http://www.w3.org/1999/xhtml "   >
<head   runat= "server ">
        <title> 无标题页 </title>
</head>
<body>
        <form   id= "form1 "   runat= "server ">
        <div>
                &nbsp;
                <input   id= "Checkbox1 "   style= "z-index:   103;   left:   64px;   position:   absolute;   top:   16px "
                        type= "checkbox "   runat= "server "   />
                <asp:TextBox   ID= "TextBox1 "   runat= "server "   Style= "z-index:   100;   left:   240px;   position:   absolute;
                        top:   112px "> </asp:TextBox>
                <asp:Label   ID= "Label1 "   runat= "server "   Style= "z-index:   101;   left:   128px;   position:   absolute;
                        top:   224px "   Text= "Label "> </asp:Label>
                <asp:ListBox   ID= "ListBox1 "   runat= "server "   Style= "z-index:   102;   left:   392px;   position:   absolute;
                        top:   72px "> </asp:ListBox>
       
        </div>
        </form>
</body>
</html>

正则表达式:
"\ <(? <TypeName> [a-zA-Z:]+)\s*(ID|id)=\ " "(? <IDName> \w+)\ " "\s*[^\> ]+runat=\ " "server\ " "[[^\> ]|[\s*]]+\> "

请帮我把提取控件名称的正则表达式(Name|name)=\ " "(? <ControlName> \w+)\ " "和提取类型的正则表达式(Type|type)=\ " "(? <Type> \w+)\ " "添加到上面正则表达式的合理位置中!

在线等答案!有了答案就结贴给分!呵呵!谢谢!




[解决办法]
关注一下,希望高手来解决一下
[解决办法]
学习..
[解决办法]
学习ing....希望高手来解决一下

[解决办法]
UP
[解决办法]
id跟控件名称,控件类型有啥区别?
------解决方案--------------------


Regex reg=new Regex(@ " <(? <TypeName> [a-zA-Z:]+?)\s*?id= " "(? <IDName> \w+?) " "[^> ]+?runat= " "server " "[^> ]+?> ",RegexOptions.IgnoreCase|RegexOptions.Singleline);
string TypeName,IDName,Type;
foreach( Match m in reg.Matches(str))
{
GroupCollection gc=m.Groups;
TypeName=gc[ "TypeName "].Value;
IDName=gc[ "IDName "].Value;
if(gc[ "TypeName "].Value.ToLower()== "input ")
Type=Regex.Match(gc[0].Value,@ "(? <=type= " ")\w+(?= " ") ",RegexOptions.IgnoreCase|RegexOptions.Singleline).Value;
}//写不到一起 分开写呗
[解决办法]
up
[解决办法]
想写到一起,确实有点难度...

一个个提取...
[解决办法]
或者这样试下

string yourStr = .............;
string typename, idname, type;
MatchCollection mc = Regex.Matches(yourStr, @ " <(? <TypeName> (input|asp:\w+))\s+id= " "(? <IDName> [^ " "]*?) " "([\s\S]*?type= " "(? <Type> [^ " "]*?) " ")?[^> ]*?> ", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
typename = m.Groups[ "TypeName "].Value;
idname = m.Groups[ "IDName "].Value;
if (m.Groups[ "TypeName "].Value == "input ")
{
type = m.Groups[ "Type "].Value;
}
}

这里没有加Name,因为需要知道Name可能出现的位置,如果说IDName,TypeName,Name的相对位置是不固定的,要麻烦得多

[解决办法]
TO:IDName\TypeName\Name的相对位置是不固定的!

位置不固定,那你自己已经写好的正则表达式也有很大的局限性,最好的做好是对于每一个属性分别用正则来提取...
[解决办法]
学习,帮顶
[解决办法]
try..

string str= "... ";
string typeName, iDName, name, type, content;
RegexOptions option = RegexOptions.IgnoreCase | RegexOptions.Singleline;
MatchCollection mc = Regex.Matches(str, @ " <(? <TypeName> (input|asp:\w+))(? <Content> ([^> ]*?))> ", option);
foreach (Match m in mc)
{
typeName = m.Groups[ "TypeName "].Value;
content = m.Groups[ "Content "].Value;
iDName = Regex.Match(content, "id=\ "(.*?)\ " ", option).Groups[1].Value;
if (typeName.ToLower() == "input ")
{
//说明是input类型
type = Regex.IsMatch(content, "type=\ "(.*?)\ " ", option) ? (Regex.Match(content, "type=\ "(.*?)\ " ", option).Groups[1].Value) : " ";
Console.WriteLine( "TypeName: " + typeName + "\tIDName: " + iDName + "\tType: " + type);
}
else
{
//说明是asp类型
name = Regex.IsMatch(content, "name=\ "(.*?)\ " ", option) ? (Regex.Match(content, "name=\ "(.*?)\ " ", option).Groups[0].Value) : " ";
Console.WriteLine( "TypeName: " + typeName + "\tIDName: " + iDName + "\tName: " + name);
}
}
------解决方案--------------------


留名
[解决办法]
接分算了
[解决办法]
TypeName的位置应该是固定的,IDName、Type、Name的相对位置不固定,且可能有也可能没有,还是分别提取出来再处理吧

热点排行