在两个字符之间获取字符串值与中间的随机字符串

时间:2017-04-27 13:20:52

标签: c# regex string

我这样的HTML行很少

<div class="itemA" attr="abc">VALUE I NEED TO GET</div>
<div class="itemA" data-attr="def">VALUE I NEED TO GET</div>
<div class="itemA" something-else="xyz">VALUE I NEED TO GET</div>
<div class="itemA" other="123">VALUE I NEED TO GET</div>
<div class="itemB">VALUE I DONT NEED TO GET</div>
<div class="itemB">VALUE I DONT NEED TO GET</div>

我知道在正则表达式中两个字符之间获取字符串值的方法如下:

(?<=[char1]).*?(?=[char2])")

当我使用这个

Regex.Matches([HTML_ABOVE], @"(?<=class=""itemA"")(.*?)(?=</div>)")

返回如:

attr="abc">VALUE I NEED TO GET
data-attr="def">VALUE I NEED TO GET
something-else="xyz">VALUE I NEED TO GET
other="123">VALUE I NEED TO GET

无论如何都要忽略或删除前置字符?

2 个答案:

答案 0 :(得分:1)

如果您在NuGet包管理器中搜索HTMLAgilityPack,您将获得一个很好的工具,它将为您完成所有解析。那你就不需要RegEx了。

答案 1 :(得分:0)

使用 not in set capture use strict; use warnings; use Class::Struct; use Const::Fast; const my $ACTION => 'Action'; const my $TYPE => 'Type'; struct MyClass => { $ACTION => '$', $TYPE => '$' }; my $obj = MyClass->new( $ACTION => 'add', $TYPE => '1' ); print $obj->$ACION; 来查找文本。所以我会把它改成

[^ ]+

表示匹配,但不消耗/捕获(?<=>)([^<]+) 。然后,一旦发现消耗所有不是>的文本。

由于html语言及其文本将跨越行,因此将获得空格字符,例如<,这将产生空白匹配。所以我会添加模式\r\n以匹配(?![\r\n])..并停止它是否看到这样的空格。

?!

这是我的C#示例

(?<=>)(?![\r\n])([^<]+)

返回四场比赛:

enter image description here