2014-02-21 146 views
0

我想弄清楚什么正则表达式会让我在一个巨大的字符串中找到以下内容,并提取值字段内的值 - 该值将始终是数字和字母的混合。值的长度会有所不同,我想忽略大小写。正则表达式,在字符串中查找表达式。

<input type="text" name="NAME_ID" value="id2654580" maxlength="25"> 

所以在上面的例子中,我会得到“id2654580”为价值,如果控制/文位于我巨大的字符串中。

+2

输入字符串看起来是HTML。你应该使用HTML解析器进行解析,因为像这样的正则表达式会非常容易出错。 – LB2

+1

如果你的文件是有效的xml,那么你会更好地搜索它作为XML而不是一个字符串。 –

+1

如果这是HTML,应该有一些HTML助手库比只是正则表达式更适合。如果它是一个xml文件,则有XDocument或XmlDocument。你不想使用这些的任何原因? – Default

回答

3

正如注释到OP已经指出:you should'nt use regex to parse html!

但是,因为你是c urious它会是什么样子:
你的正则表达式会是这样的

<input.*value="(.+?)".*> 

这将让你输入标签(一个或多个)的值(S),如果有任何规定。

<input #matches "<input" literally 
.*  #matches zero to unlimited characters 
value=" #matches 'value="' literally 
(.+?) #captures as few characters as possible 
"  #matches " literally 
.*  #same as above 
>  #matches > literally 

在C#:

//using System.Text.RegularExpressions 

string str = "<input type=\"text\" name=\"NAME_ID\" value=\"id2654580\" maxlength=\"25\">"; 
Regex re = new Regex(@"<input.*value=""(?<val>.+?)"".*>"); //note the named group 

Match match = re.Match(str); 
String value = match.Groups["val"].Value; 
+0

不会检查整个输入节点吗? OP正在查找值字符串 – Default

+0

@默认它将在整个输入节点上匹配,但仅捕获该值。如果不匹配整个输入字段,您将获得所有节点的所有值(如果有任何指定的话),并且我理解OP,就好像他只想从输入字段获取值。 –

+0

很酷。我对正则表达式不太熟悉,所以我很疑惑。你可以展示一下如何在C#程序中使用它吗? – Default

1

,如果你只是在寻找的价值,我会用:

Regex reg = new Regex(@"value=\""(?<value>[^\""]+)\"""); 

string value = null; 

if(reg.IsMatch) 
{ 
    Match m = reg.Match(inputstring); 
    value = m.Groups["value"].Value; 
} 
0
static string GetValue(string str, string name) 
{ 
    var rx = new Regex(@"<input\s+type=""text""\s+name="""+ name [email protected]"""\s+value=""(?<value>.+)""\s+maxlength=""25"">"); 
    return rx.Match(str).Groups["value"].Value; 
} 

用法:

var str = @"<input type=""text"" name=""NAME_ID"" value=""id2654580"" maxlength=""25"">"; 
    var value = GetValue(str, "NAME_ID"); //id2654580 
相关问题