3

PDF から NSString にテキストを読み込んでいます。以下のコードを使用してすべてのスペースを置き換えます

NSString *pdfString = convertPDF(path);
    pdfString=[pdfString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    pdfString=[pdfString stringByReplacingOccurrencesOfString:@"\r" withString:@""];
    pdfString=[pdfString stringByReplacingOccurrencesOfString:@"\n" withString:@""];

ただし、これにより、段落スペースと複数行も削除されます。\n または \r を 1 つだけ置き換えて、段落スペースまたは複数のタブと次の行を保持したいと考えています。

4

3 に答える 3

3

次の 2 つの方法があります。

  1. ループで手動検索を行う

で文字列の範囲を取得できます-rangeOfCharactersFromSet:options:range:。このようなアプローチの真髄は、見つかった一致ごとに検索範囲を縮小することです。そうすることで、見つかった範囲と検索範囲を簡単に比較できます。見つかった範囲が最初にある場合、それは double (または triple)\rです。

  1. 個々のコンポーネントを取得する

With -componentsSeparatedByCharactersFromSet:( NSString) は、文字列を で区切った配列を返します\r。この配列の空の文字列は double (または triple)\rです。それらを a に置き換えてから\r、コンポーネントをスペースで再結合します。

于 2015-05-06T13:08:38.337 に答える
1

これを行うにはNSRegularExpressionを使用する必要があります

NSString *pdfString = convertPDF(path);

//Replace all occurrences of \n by a single \n
NSRegularExpression *regexN = [NSRegularExpression regularExpressionWithPattern:@"\n" options:0 error:NULL];
pdfString = [regexN stringByReplacingMatchesInString:pdfString options:0 range:NSMakeRange(0, [pdfString length]) withTemplate:@"\n"];

//Replace all occurrences of \r by a single \r
NSRegularExpression *regexR = [NSRegularExpression regularExpressionWithPattern:@"\r" options:0 error:NULL];
pdfString = [regexR stringByReplacingMatchesInString:pdfString options:0 range:NSMakeRange(0, [pdfString length]) withTemplate:@"\r"];
于 2015-05-06T13:11:19.483 に答える
0

正規表現を試しましたか?\nanが別の なしで単独で出現する出現のみをキャッチし、\nそれらの出現を空の文字列に置き換えることができます。

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^\n]([\n])[^\n];" options:0 error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@""];
于 2015-05-06T13:24:01.640 に答える