2

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

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

">Dave Smith\u0012\/a>\u0012\/div>\u0012div class=\"fsa fwb fcc

我想使用以下表达式来匹配名称:

""">.+?""fsa fwb fcc"

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

然而,当 "> 出现在整个文件中时,它从更早的时候开始匹配。我一直想知道如何从最后一次出现的东西开始匹配,在这种情况下,">,直到指定的结尾。

4

2 回答 2

1

你可以试试这个: -

.+((fsa|fwb|fcc).+)$

+匹配前面的许多字符。

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

.+)匹配并捕获字符。

$匹配行尾。

编辑:-正如m.buettner RegexOptions.RightToLeft建议的那样,应该适用于您的情况。

于 2013-08-15T21:02:30.780 回答
0

描述

看起来您的结尾字符串是字面意思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

找到的匹配项:

[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……即实际名称而不是标记文本,那么看看这个表达式

">((?:(?!">).)*?)\\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

找到的匹配项

[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
于 2013-08-16T02:07:11.000 回答