-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

テキスト ファイルには 3 つの段落があります。

まず、いくつかの文です。2 つ目は、文番号付きリストです。3 つ目は簡単な箇条書きリストです。

私の質問は、Objective-C で、段落構成が単なる文である場合、それらを NSString として返し、箇条書きリストである場合、それらを NSArray で区切り、段落が文と番号付きリストの組み合わせで、NSString と NSArray の両方の辞書として返します。

何か案は?正規表現を使用してそれらを配列または文字列に分離できることは知っていますが、パラが次のものであるかどうかを検出して検証する方法がよくわかりません。

  1. 段落(文)
  2. 箇条書き/番号付きリスト。
  3. リストとパラの組み合わせ

正規表現に関する一連のチュートリアルとSOの質問を読んだ後、これを試しました。

この式(?=\d*\s*[\.]?\s*)([a-z\s]+)は番号付きリストを取得しますが、リストの前にあるテキストも取得します。それは私が完全に立ち往生しているところです。

4

2 に答える 2

1

私がこれを書いている時点で、2 票の締めくくりがあり、コメントも回答もありませんが、これは驚くべきことではありません。人々は尋ねます:彼は何を試しましたか?アルゴリズムはどこにありますか?彼はどんな研究をしたのですか?あなたが求めていることは、SOの通常の領域には当てはまりません。

正式には、文法によって定義される言語があり、データがこの言語のであるかどうかを判断する必要があります。そうである場合、その構成部分は解析と呼ばれ、通常は字句解析と構文解析を伴います。

潜在的に非常に大きな問題ですが、常にではありません。

このトピックに関する文献は膨大ですが、かなりランダムな出発点として、上記の用語のいくつかを非常に簡単に定義するThe Chomsky Hierarchyを見てください。

次に、文法を定義します。例:とは?番号付き文とは?(数字ドットの後にが続く可能性があります)番号付きリストとは? (おそらく 1 つまたは複数の番号付きの文) など。

あなたの文法はタイプ3ですか?もしそうなら、正規表現で解析でき、Cocoa で利用できます。

タイプ 3 でない場合は、パーサーを作成するか、パーサー ジェネレーターを使用する必要あります。これは大きなトピックですが、あなたの文法は単純で、単純なアドホックまたは再帰降下パーサーで十分だと思います。(確かに、定義を単純に保てば、タイプ 3 文法を思いつくことができると思います。)

トラックをさらに下ったときに行き詰まった場合は、領域内でより多くの質問を表現できる場合がありますので、お手伝いします。

HTH。

于 2013-02-08T18:51:52.883 に答える
0

Objective-C Markdownパーサーを使用するのはどうですか?

文法はあなたが使用しているものと本当に似ており、あなたはあなた自身のパーサーを書くことを学ぶ必要はありません。

于 2013-02-17T20:32:02.463 に答える