【发布时间】:2010-11-30 16:33:24
【问题描述】:
人们对 XML 有很多抱怨,但与 EDI 和我在职业生涯中处理过的一些专有文件格式相比,我认为 XML 是幸福的。我从汽车比较评估师导入数据文件时所做的工作,每个文件都有自己的创造性和噩梦般的文件格式,仍然让我做噩梦。
话虽如此,我很好奇其他程序员如何自动解析格式不佳的文本文件。你有语言偏好吗?是否有任何您认为非常宝贵的自动化工具?你如何让你的代码可重用?
【问题讨论】:
标签: parsing
人们对 XML 有很多抱怨,但与 EDI 和我在职业生涯中处理过的一些专有文件格式相比,我认为 XML 是幸福的。我从汽车比较评估师导入数据文件时所做的工作,每个文件都有自己的创造性和噩梦般的文件格式,仍然让我做噩梦。
话虽如此,我很好奇其他程序员如何自动解析格式不佳的文本文件。你有语言偏好吗?是否有任何您认为非常宝贵的自动化工具?你如何让你的代码可重用?
【问题讨论】:
标签: parsing
Perl / Python,慢慢地构建功能,把最差的作为测试用例,大量的咖啡
【讨论】:
当我需要解析格式不佳的文本时,我使用 Perl 和 Marpa,general BNF parser。查看文本,找到模式,将它们描述为 BNF 规则,例如
pattern_name ::= pattern_symbol1 pattern_symbol2 ...
或者对于词位模式,
lexeme ~ lexeme_symbol1 lexeme_symbol2 ...
您可以使用单引号字符串和字符类来描述 BNF 语法文本中的词位。将 BNF 提供给 Marpa,定义语义动作并评估解析或仅处理 ast 以获得结果。
使用 Marpa 解析格式不佳的文本的 Perl 脚本示例在 SO:
Problem Category = "Human Endeavors "
Problem Subcategory = "Space Exploration"
Problem Type = "Failure to Launch"
Software Version = "9.8.77.omni.3"
Problem Details = "Issue with signal barrier chamber."
摘自:
Problem Category: Human Endeavors Problem Subcategory: Space ExplorationProblem Type: Failure to LaunchSoftware Version: 9.8.77.omni.3Problem Details: Issue with signal barrier chamber.
key1
key2
key3
key4
key5
key6
key7
提取自
dummy
(key1)
(key2)dummy(key3)
dummy(key4)dummy
dummy(key5)dummy))))dummy
dummy(key6)dummy))(key7)dummy))))
ABC 2.5 19
XYZ 6.5 15
摘自
<[/] Trading 10mm ABC 2.5 19 05/06 mkt can use 50mm>
<XYZ 6.5 15 10-2B 106-107 B3 AAA- 1.646MM 2x2>
希望这会有所帮助。
【讨论】:
我知道我会为此收到严厉的回应,但我喜欢 Java 作为一种全能语言。在文件解析的情况下,通用正则表达式(我知道,现在我有 2 个问题......)对我来说效果很好。
【讨论】: