.net 正则表达式-匹配最后一次出现

.net 正则表达式-匹配最后一次出现,.net,regex,.net,Regex,我有一个充满名字的文本文件,我想通过正则表达式匹配它们 每个名称以以下文字结尾:fsa fwb fcc,例如: ">Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc 我想使用以下表达式来匹配名称: """>.+?""fsa fwb fcc" AKA匹配从“>到fsa fwb fcc的所有文本,然后我可以自己解析多余的匹配文本 但是,由于“>在整个文件中出现,它从更早开始匹配。我一直想知道如何匹配

我有一个充满名字的文本文件,我想通过正则表达式匹配它们

每个名称以以下文字结尾:fsa fwb fcc,例如:

">Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
我想使用以下表达式来匹配名称:

""">.+?""fsa fwb fcc"
AKA匹配从“>fsa fwb fcc的所有文本,然后我可以自己解析多余的匹配文本

但是,由于“>在整个文件中出现,它从更早开始匹配。我一直想知道如何匹配从最后一次发生的事情,在这种情况下,“>,到指定的结尾。

您可以尝试以下方法:-

.+((fsa|fwb|fcc).+)$
+匹配前面的许多字符

((fsa | fwb | fcc)匹配并捕获关键字

+匹配并捕获字符

$匹配行的末尾

编辑:-正如m.buettner所建议的那样,应该适用于您的案例。

描述 看起来您要结束的字符串实际上是
fsa fwb fcc
,并且您感兴趣的子字符串的开头直接在结束字符串之前的最后一个
“>
之后开始

此表达式将:

  • 查找上一个
    “>
    和下一个
    fsa fwb fcc
“>((?:(?!”>)*)fsa\sfwb\sfcc

示例文本

">sometext">A Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
">sometext">B Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
">sometext">C Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
">sometext">A Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
">sometext">B Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
">sometext">C Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
找到匹配项:

[0][0] = ">A Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
[0][1] = A Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"

[1][0] = ">B Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
[1][1] = B Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"

[2][0] = ">C Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
[2][1] = C Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"
或 如果您想更进一步,只捕获从最后一个
“>
\u0012
fsa fwb fcc
之前的
。。。i、 e.实际名称而不是标记文本,然后查看此表达式

“>((?:(?!”>)*?)\\u0012(?:(?!”>)*fsa\sfwb\sfcc

示例文本

">sometext">A Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
">sometext">B Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
">sometext">C Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
">sometext">A Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
">sometext">B Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
">sometext">C Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
找到匹配项

[0][0] = ">A Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
[0][1] = A Dave Smith

[1][0] = ">B Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
[1][1] = B Dave Smith

[2][0] = ">C Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc
[2][1] = C Dave Smith

在您的特定情况下,应该这样做。不要用正则表达式解析HTML。naomik所说的。是相关问题的顶部。;)这不是解析,而是模式匹配。考虑到需求,我怀疑这可以通过HTML解析引擎像通过模式匹配一样轻松完成。而且我也不确定\u0012是一个有效的html字符。谢谢m.buettner,Regex.Options.RightToLeft工作得很好!正是我想要的。关于这个Regex的工作原理。@HamZa:-更新了解释。如果不起作用,一定要告诉我!!:)谢谢你的解释,不幸的是,它对我不起作用,而是匹配了整个文件!@stanleyhiggins:-明白了吗r点。也更新了我的答案。这样它也可以作为将来的参考。:)谢谢你的帮助,Rahul!这是一个非常好的解释,非常彻底,非常有效!我非常感谢!