-2

我在试图解析的文件中有一些文本。

考虑这个文本文件:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do 
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 
1. Line 1
2. Line 2

+ Line 1
+ Line 2
+ Line 3

文本文件中有三个段落。

首先是几句话。第二个有一个句子一个编号列表。第三是一个简单的项目符号列表。

我的问题是,在 Objective-C 中,我如何确定段落组合是否只是句子,我会将它们作为 NSString 返回,如果它是项目符号列表,我希望它们在 NSArray 中分开,如果段落是句子和编号列表的组合,我会将它们作为 NSString 和 NSArray 的字典返回。

有任何想法吗?我知道我可以使用正则表达式将它们分成数组或字符串,但我不太清楚如何检测和验证 para 是否为:

  1. 段落(句子)
  2. 项目符号列表/编号列表。
  3. List和Para的结合

在阅读了一堆关于正则表达式的教程和 SO 问题后,我已经尝试过了。

此表达式(?=\d*\s*[\.]?\s*)([a-z\s]+)确实获取编号列表,但它还获取列表之前的前面文本。那是我完全被困住的地方。

4

2 回答 2

1

在我写这篇文章的时候,你有 2 票可以结束,没有评论或答案,这并不奇怪。人们会问:他尝试了什么?算法在哪里?他做了什么研究?等等等等你问的不属于SO的正常范围。

形式上,您拥有的是一种由语法定义的语言,您需要确定您的数据是否是该语言中的句子,如果是,则确定其组成部分,称为解析,通常涉及词法句法分析

可能是一个非常大的问题,但并非总是如此。

关于这个主题的文献很多,但作为一个相当随机的起点,请看一下乔姆斯基层次结构,它非常简要地定义了上述一些术语。

现在定义你的语法。例如,什么是句子?什么是编号句?(可能是一个数字点后跟一个句子) 什么是编号列表?(可能是一个或多个编号的句子)等。

你的语法是3型吗?如果是这样,您可以使用正则表达式对其进行解析,并且它们在 Cocoa 中可用。

如果它不是类型 3,那么您将需要编写解析器或使用解析器生成器。这是一个很大的话题,但我怀疑你的语法会很简单,一个简单的临时或递归下降解析器就足够了。(事实上​​,我猜如果你的定义保持简单,你可以想出一个类型 3 的语法。)

如果您在走得更远时遇到困难,那么您可能可以在该领域提出更多问题,这样可以帮助您。

HTH。

于 2013-02-08T18:51:52.883 回答
0

使用Objective-C Markdown 解析器怎么样?

语法与您使用的语法非常相似,您不必学习编写自己的解析器。

于 2013-02-17T20:32:02.463 回答