问题标签 [parsing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
63125 浏览

c# - 寻找 C# HTML 解析器

可能重复:
在 C# 中解析 html 的最佳方法是什么?

我想提取 HTML 文档的结构 - 所以标签比内容更重要。理想情况下,它也能够在某种程度上合理地处理格式错误的 HTML。

有人知道可靠且高效的解析器吗?

0 投票
23 回答
31453 浏览

string - 将人名解析为其组成部分的简单方法?

许多联系人管理程序都会这样做——你输入一个名字(例如,“John W. Smith”),它会自动在内部将其分解为:

名字: John
中间名: W.
姓氏: Smith

同样,它会计算出诸如“Jane W. Smith 夫人”和“Dr. John Doe, Jr.”之类的东西。也正确(假设您允许在名称中使用“前缀”和“后缀”等字段)。

我认为这是人们想要做的相当普遍的事情......所以问题是......你会怎么做?有一个简单的算法吗?也许是一个正则表达式?

我正在寻求 .NET 解决方案,但我并不挑剔。

更新:我很感激没有涵盖所有边缘案例和文化的简单解决方案......但是为了争论起见,我们假设您需要分片的名称(填写表格 - 例如税收或其他政府表格 - 是您必须在固定字段中输入姓名的一种情况,无论您喜欢与否),但您不一定要强制用户将他们的姓名输入离散字段(更少打字=更容易新手用户)。

您希望程序“猜测”(尽其所能)第一个、中间、最后一个等。如果可以,请查看 Microsoft Outlook 如何为联系人执行此操作 - 它允许您输入姓名,但是如果您需要澄清,可以打开一个额外的小窗口。我会做同样的事情——给用户一个窗口,以防他们想以离散的部分输入名称——但允许在一个框中输入名称并进行涵盖常见名称的“最佳猜测”。

0 投票
19 回答
76116 浏览

c# - 测试字符串是否是一个没有抛出异常的 guid?

我想尝试将字符串转换为 Guid,但我不想依赖捕获异常(

  • 出于性能原因 - 异常是昂贵的
  • 出于可用性原因 - 调试器弹出
  • 出于设计原因 - 预期也不例外

换句话说,代码:

不适合。

我会尝试使用正则表达式,但由于 guid 可以用括号包裹、大括号包裹、不包裹,所以很难。

此外,我认为某些 Guid 值无效(?)


更新 1

ChristianK有一个好主意,只捕获FormatException,而不是全部。更改了问题的代码示例以包含建议。


更新 2

为什么要担心抛出的异常?我真的经常期待无效的 GUID 吗?

答案是肯定的。这就是我使用 TryStrToGuid 的原因 - 我期待错误的数据。

示例 1 可以通过将 GUID 附加到文件夹名称来指定命名空间扩展。我可能正在解析文件夹名称,检查最后的. 是一个 GUID。

示例 2我可能正在运行一个频繁使用的 Web 服务器,想要检查一些回发数据的有效性。我不希望无效数据占用比所需资源高 2-3 个数量级的资源。

示例 3我可能正在解析用户输入的搜索表达式。

在此处输入图像描述

如果他们输入 GUID,我想专门处理它们(例如专门搜索该对象,或在响应文本中突出显示和格式化该特定搜索词。)


更新 3 - 性能基准

测试转换 10,000 个好的 Guid 和 10,000 个坏的 Guid。

ps 我不应该证明一个问题的合理性。

0 投票
2 回答
1849 浏览

parsing - 如何使用 Flex 实现两遍扫描仪?

作为一个宠物项目,我想尝试实现一种我自己设计的基本语言,可以用作网络脚本语言。将 C++ 程序作为 Apache CGI 运行是微不足道的,因此真正的工作在于如何解析包含非代码(HTML/CSS 标记)和服务器端代码的输入文件。

在我本科的编译器课程中,我们使用FlexBison为一种简单的语言生成扫描器和解析器。我们得到了一份语法副本,并编写了一个解析器,将简单的语言翻译成虚拟机的简单程序集。flex 扫描器对输入进行标记,并将标记传递给 Bison 解析器。

这与我想做的不同之处在于,就像 PHP 一样,这种语言可以有纯 HTML 标记,而脚本语言可以像下面这样穿插:

我假设按如下方式解析输入文件会很有效,我是否不正确:

  1. 扫描输入,直到找到脚本开始标记('
  2. 第二个扫描器标记输入文件的服务器端脚本部分(来自打开标记:'')并将标记传递给解析器,它不需要知道文件中的标记。
  3. 控制权返回到继续这种一般模式的第一个扫描仪。

基本上,第一个扫描器只区分标记(直接返回到浏览器未修改)和代码,它被传递给第二个扫描器,第二个扫描器反过来标记代码并将标记传递给解析器。

如果这不是一个可靠的设计模式,PHP 等语言如何有效地处理扫描输入和解析代码?

0 投票
2 回答
4127 浏览

parsing - 是什么让 Ometa 与众不同?

Ometa是“一种新的面向对象的模式匹配语言”。我之前在 Oz 工具等语言中遇到过模式匹配,用于解析 Lexx/Yacc 或 Pyparsing 等语法。尽管查看示例代码、阅读讨论并与朋友交谈,但我仍然无法真正理解 Ometa 的特别之处(或者至少,为什么有些人认为它如此)。有什么解释吗?

0 投票
3 回答
825 浏览

python - PLY:C 解析器中的令牌转移问题

我正在使用 PLY 编写一个 C 解析器,最近遇到了一个问题。这段代码:

是正确的 C 代码,因为 my_type 被定义为之前使用的类型。我通过在解析器中填充类型符号表来处理它,词法分析器使用该表来区分类型和简单标识符。

但是,虽然类型声明规则以 SEMI(';' 标记)结尾,但 PLYmy_type在决定使用第一行完成之前将标记从第二行转移。因此,我没有机会将类型符号表中的更新传递给词法分析器,它会将 my_type 视为标识符而不是类型。

任何修复的想法?

完整代码位于:http ://code.google.com/p/pycparser/source/browse/trunk/src/c_parser.py 不知道如何从中创建一个更小的示例。

编辑:

问题解决了。请参阅下面的解决方案。

0 投票
10 回答
39968 浏览

math - 数学解析器的智能设计?

设计数学解析器最聪明的方法是什么?我的意思是一个接受数学字符串(如:“2 + 3 / 2 + (2 * 5)”)并返回计算值的函数?很久以前我确实在VB6中写过一个,但它最终变得臃肿而且不是很便携(或者就此而言很聪明......)。一般的想法,伪代码或真实代码表示赞赏。

0 投票
5 回答
10198 浏览

python - python正则表达式分割段落

如何编写一个正则表达式在 python 中使用来分割段落?

一个段落由 2 个换行符 (\n) 定义。但是可以有任意数量的空格/制表符以及换行符,它仍然应该被视为一个段落。

我正在使用 python,因此该解决方案可以使用扩展的 python正则表达式语法。(可以利用(?P...)东西)

例子:

我能提供的最好的方法是:r'[ \t\r\f\v]*\n[ \t\r\f\v]*\n[ \t\r\f\v]*',即

但这很丑陋。有更好的吗?

编辑

拒绝的建议:

r'\s*?\n\s*?\n\s*?'-> 这将使示例 2 和 3 失败,因为\s包含\n,因此它将允许超过 2\n秒的段落中断。

0 投票
4 回答
9369 浏览

java - 最佳 StAX 实施

我的快速搜索显示了参考实现 ( http://stax.codehaus.org )、Woodstox 实现 ( http://woodstox.codehaus.org ) 和 Sun 的 SJSXP 实现 ( https://sjsxp.dev.java.net /)。

请评论这些的相对优点,并填写我应该考虑的任何其他实现。

0 投票
5 回答
2254 浏览

delphi - 模拟 PHP 函数 parse_url 的 Delphi/FreePascal 库或函数

我在 Object Pascal 中做一个站点地图生成器,需要一个好的函数或库来模拟 PHP 上的parse_url函数。

有谁知道有什么好的吗?