问题标签 [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.
c# - 寻找 C# HTML 解析器
可能重复:
在 C# 中解析 html 的最佳方法是什么?
我想提取 HTML 文档的结构 - 所以标签比内容更重要。理想情况下,它也能够在某种程度上合理地处理格式错误的 HTML。
有人知道可靠且高效的解析器吗?
string - 将人名解析为其组成部分的简单方法?
许多联系人管理程序都会这样做——你输入一个名字(例如,“John W. Smith”),它会自动在内部将其分解为:
名字: John
中间名: W.
姓氏: Smith
同样,它会计算出诸如“Jane W. Smith 夫人”和“Dr. John Doe, Jr.”之类的东西。也正确(假设您允许在名称中使用“前缀”和“后缀”等字段)。
我认为这是人们想要做的相当普遍的事情......所以问题是......你会怎么做?有一个简单的算法吗?也许是一个正则表达式?
我正在寻求 .NET 解决方案,但我并不挑剔。
更新:我很感激没有涵盖所有边缘案例和文化的简单解决方案......但是为了争论起见,我们假设您需要分片的名称(填写表格 - 例如税收或其他政府表格 - 是您必须在固定字段中输入姓名的一种情况,无论您喜欢与否),但您不一定要强制用户将他们的姓名输入离散字段(更少打字=更容易新手用户)。
您希望程序“猜测”(尽其所能)第一个、中间、最后一个等。如果可以,请查看 Microsoft Outlook 如何为联系人执行此操作 - 它允许您输入姓名,但是如果您需要澄清,可以打开一个额外的小窗口。我会做同样的事情——给用户一个窗口,以防他们想以离散的部分输入名称——但允许在一个框中输入名称并进行涵盖最常见名称的“最佳猜测”。
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 我不应该证明一个问题的合理性。
parsing - 如何使用 Flex 实现两遍扫描仪?
作为一个宠物项目,我想尝试实现一种我自己设计的基本语言,可以用作网络脚本语言。将 C++ 程序作为 Apache CGI 运行是微不足道的,因此真正的工作在于如何解析包含非代码(HTML/CSS 标记)和服务器端代码的输入文件。
在我本科的编译器课程中,我们使用Flex和Bison为一种简单的语言生成扫描器和解析器。我们得到了一份语法副本,并编写了一个解析器,将简单的语言翻译成虚拟机的简单程序集。flex 扫描器对输入进行标记,并将标记传递给 Bison 解析器。
这与我想做的不同之处在于,就像 PHP 一样,这种语言可以有纯 HTML 标记,而脚本语言可以像下面这样穿插:
我假设按如下方式解析输入文件会很有效,我是否不正确:
- 扫描输入,直到找到脚本开始标记('
- 第二个扫描器标记输入文件的服务器端脚本部分(来自打开标记:'')并将标记传递给解析器,它不需要知道文件中的标记。
- 控制权返回到继续这种一般模式的第一个扫描仪。
基本上,第一个扫描器只区分标记(直接返回到浏览器未修改)和代码,它被传递给第二个扫描器,第二个扫描器反过来标记代码并将标记传递给解析器。
如果这不是一个可靠的设计模式,PHP 等语言如何有效地处理扫描输入和解析代码?
parsing - 是什么让 Ometa 与众不同?
Ometa是“一种新的面向对象的模式匹配语言”。我之前在 Oz 工具等语言中遇到过模式匹配,用于解析 Lexx/Yacc 或 Pyparsing 等语法。尽管查看示例代码、阅读讨论并与朋友交谈,但我仍然无法真正理解 Ometa 的特别之处(或者至少,为什么有些人认为它如此)。有什么解释吗?
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 不知道如何从中创建一个更小的示例。
编辑:
问题解决了。请参阅下面的解决方案。
math - 数学解析器的智能设计?
设计数学解析器最聪明的方法是什么?我的意思是一个接受数学字符串(如:“2 + 3 / 2 + (2 * 5)”)并返回计算值的函数?很久以前我确实在VB6中写过一个,但它最终变得臃肿而且不是很便携(或者就此而言很聪明......)。一般的想法,伪代码或真实代码表示赞赏。
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
秒的段落中断。
java - 最佳 StAX 实施
我的快速搜索显示了参考实现 ( http://stax.codehaus.org )、Woodstox 实现 ( http://woodstox.codehaus.org ) 和 Sun 的 SJSXP 实现 ( https://sjsxp.dev.java.net /)。
请评论这些的相对优点,并填写我应该考虑的任何其他实现。
delphi - 模拟 PHP 函数 parse_url 的 Delphi/FreePascal 库或函数
我在 Object Pascal 中做一个站点地图生成器,需要一个好的函数或库来模拟 PHP 上的parse_url函数。
有谁知道有什么好的吗?