0

我正在使用.net regex 兼容,虽然确实使用editpadpro。我正在从 .pdf 重新格式化为一个简单的网页,但是 pdf 文件中的一些文本没有正确显示,例如一些黑色字体的字符串后面应该跟黑色文本的描述。但是很多行不在一起,所以黑字串单独说:

单词

词的描述

我想要实现的是

的描述

因为是一个 html 文件,所以我正在处理标签

</span> or <br/>

我确实需要只选择那些单独的单词,而不干扰那些已经很好的单词。

所以我要定位的是像这样的行

<p><span class="font7" style="font-weight:bold;">text text text text </span></p>\r\n<p>

其中“文本”重复 4 次是带有目标行的黑色字体文本。但是我想避免这样的行

<p><span class="font7" style="font-weight:bold;">text text text text </span><span class="font7"> text text text <br/> text text text </span></p>\r\n<p>

我一直在尝试使用 jgsoft 或 .net 兼容表达式使用正则表达式,因为我尝试使用前瞻(虽然不是必需的),但这似乎不起作用,我想知道为什么

<p><span class="font7" style="font-weight:bold;">.+?(?:(?!.+?</span>.+?$)){2}</p>\r\n<p>

这是我做的另一次尝试,但效果不佳。

<p><span class="font7" style="font-weight:bold;">(?!.+(</span>).+\1)</p>\r\n<p>

我尝试在字符串的开头使用前瞻来匹配,但最后我做了很多尝试,我更喜欢问像你这样的人,他们可能知道如何解决这个问题。

所以最后我想要的是从这些行中删除这部分以定位。

</p>\r\n<p>

因为那些doble段落不是必需的,而只是在那些特定的行中。通过这样做,看起来像这样

的描述

如果您可以提供 .net 风格或 perl 风格,请使用文本编辑器执行会很好,尽管如果您有任何其他建议也会很好。

来自墨西哥库埃纳瓦卡的问候,对不起我的英语,感谢您的帮助。

4

1 回答 1

1

如果你把它分成更小的部分,这样的事情可能会起作用:

var valid = "<p><span class=\"font7\" style=\"font-weight:bold;\">text text text text </span></p>\r\n<p>";
var invalid = "<p><span class=\"font7\" style=\"font-weight:bold;\">text text text text </span><span class=\"font7\"> text text text <br/> text text text </span></p>\r\n<p>";
var input = valid + invalid;

foreach (Match match in Regex.Matches (input, "<p>(?!<p)(.*?)</p>")) {
    var line = match.Groups [1].Value;
    Console.WriteLine ("MATCH: {0}", line);

    var spans = Regex.Matches (line, "<span.*?>(.*?)</span>");
    Console.WriteLine ("SPANS: {0}", spans.Count);
}

因此,您首先通过匹配 any 来分解事物<p>.....</p>,然后检查里面的内容。

于 2012-12-15T07:49:26.597 回答