我这样的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
无论如何都要忽略或删除前置字符?
答案 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])([^<]+)
返回四场比赛: