【发布时间】:2013-02-22 04:39:55
【问题描述】:
我一直无法找到解决此问题的方法。
我正在解析一些电子书的内容,找到特定的术语和字符,标记每个术语的位置和长度。
正常情况是这样的(摘自《权力的游戏》):
“当他停下来往下看时,他的头晕晕乎乎的,他感到手指在滑落。布兰哭了出来,紧紧抓住生命。”
如果我们要搜索字符“Bran”,它的位置是 85,长度是 4。很简单。
当有这样的段落时,我的问题就出现了:
<span height="-0em"><font size="7">D</font></span>aenerys Targaryen wed Khal Drogo
我们需要匹配“Daenerys Targaryn”。剥离 HTML 并匹配字符串很容易,但在此示例中,结果需要包含 HTML。因此,这里的预期结果是 location = 0, length = 67。
另一种情况,由散布在各处的随机锚标签引起:
Did anyone outside the Vale even suspect where Catelyn <a></a>Stark had taken him?
同样,搜索“Catelyn Stark”需要包含 HTML,因此 location = 47,length = 20。
我已经能够通过添加这些特定案例暂时解决它(专门搜索“Catelyn Stark),但显然我应该有一个更强大的解决方案,我似乎无法得到我的转过头来。我的尝试一直在使用 RegEx,但收效甚微。
我发现了有关 HTML 匹配/剥离(以及是否使用 RegEx =))的各种问题,但这种情况似乎有些独特。
剥离标签不是一种选择,因为必须保留内容。
这是在一个独立的 C# 应用程序中。
如果您的搜索比我的更好,任何想法、正确方向的步骤或类似示例将不胜感激!
【问题讨论】:
-
为什么不能使用
IndexOfMehtod 和SubString()方法和Length方法..??? -
你对位置和长度信息做了什么?
-
呃。正则表达式不适合 html 解析...当然,您没有在这里显式解析 html,但您也可以这样做。我能给出的最佳建议是增加你的表达,为任何“标签”包含一些贪婪的前瞻匹配,即从小于到大于。
-
除非您使问题更通用并适用于更广泛的背景,否则恐怕它“过于本地化”。还请解释为什么即使您没有使用 Regex 也需要 Regex,并发现为什么使用 Regex 进行 HTML 解析的能力范围从“理论上不可能”到“仅限于众所周知格式的非通用 HTML”。
-
对不起,如果不清楚,但我并不特别需要正则表达式来匹配它,这只是我对尝试什么的初步感觉。任何适当的解决方案都会起作用。位置和长度信息用于在另一台设备上突出显示摘录中的字符,这需要包含 HTML
标签: c#