如何使用Regex查找第三个元素值

时间:2018-05-31 16:44:13

标签: c# regex selenium

所有,我目前正在尝试使用regex和c#解析具有以下格式的每个元素以查找下面的()中的任何值。示例我想提取2002_max_allow_date ..注意这里的所有名称都不会是字母数字等......

我最初有这样的模式:Regex regex = new Regex(@“(\ w \ d \ d \ d。[A-Z])\ w +”);

但是,这只返回带有数字等的名称

从回复我尝试以下并尝试格式化,以便我不会得到语法错误,以及我不想更改正则表达式查询...

enter image description here

有人可以帮我找到位于第三位的名字。例如,'46032','46032','2002_MAX_ALLOW_DATE'

<button class="longlist-cb longlist-cb-yes" id="cb46032" 
       onclick="$ll.CATG.toggleCb(this,'46032','46032','2002_MAX_ALLOW_DATE')"
</button>

3 个答案:

答案 0 :(得分:0)

第二次编辑:

我编写了一些代码,将onclick中的所有元素作为捕获组提供:

Regex regex = new Regex("onclick=\"\\$ll.CATG.toggleCb\\((.*),\\s?(.*),\\s?(.*),\\s?(.*)\\)");
string x = "<button class=\"longlist - cb longlist - cb - yes\" id=\"cb46032\" onclick=\"$ll.CATG.toggleCb(this, '46032', '46032', '2002_MAX_ALLOW_DATE')\"></button>";
Match match = regex.Match(x);
if (match.Success)
{
    Console.WriteLine("match.Value returns: " + match.Value);
    foreach (Group y in match.Groups)
    {
        Console.WriteLine("the current capture group: " + y.Value);
    }
}
else
{
    Console.Write("No match");
}
Console.ReadKey();

将打印: enter image description here

编辑:尝试使用VS后,这对我有用:Regex regex = new Regex("onclick=\"\\$ll.CATG.toggleCb\\((.*),.*,.*,.*\\)");

原始答案: 如果您在提供的文字上使用Regex regex = new Regex(@"onclick="\$ll.CATG.toggleCb\(.*,.*,(.*),.*\)");,则应返回'46032'

您可以通过将捕获()移动到另一个.*来更改此正则表达式,以捕获第四个元素,如下所示:{{1}将捕获onclick="\$ll.CATG.toggleCb\((.*),.*,.*,.*\)

答案 1 :(得分:0)

请试试这个

Regex rex = new Regex("'[^']+','[^']+','(?<ThirdElement>[^']+)'");
String data  = "'46032','46032','2002_MAX_ALLOW_DATE'";
Match match = rex.Match(data);
Console.WriteLine(match.Groups["ThirdElement"]); // Output: 2002_MAX_ALLOW_DATE

答案 2 :(得分:0)

为什么不获取onclick的属性值,而是获取使问题变得复杂的按钮的所有HTML。

使用String.Split可以简单地解决您的问题,但您选择使用RegExp。

the_button_element.GetAttribute('onclick').Split(',')[3]

或使用RegExp:

new Regex(@".*?,'(\w+)'\)$")