Ios 仅替换NSString中\n或\r的单个匹配项
我正在阅读从PDF到NSString的文本。我使用下面的代码替换所有空格Ios 仅替换NSString中\n或\r的单个匹配项,ios,objective-c,cocoa,pdftotext,Ios,Objective C,Cocoa,Pdftotext,我正在阅读从PDF到NSString的文本。我使用下面的代码替换所有空格 NSString *pdfString = convertPDF(path); pdfString=[pdfString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; pdfString=[pdfString stringByReplacingOccurrencesOfString:@"
NSString *pdfString = convertPDF(path);
pdfString=[pdfString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
pdfString=[pdfString stringByReplacingOccurrencesOfString:@"\r" withString:@""];
pdfString=[pdfString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
但这也消除了段落空间和多行。我只想替换一次出现的\n或\r,并保留段落空格或多个制表符和下一行。有两种方法:
-rangeOfCharactersFromSet:options:range:
获取字符串的范围。这种方法的精髓是减少每次找到匹配的搜索范围。这样做,您只需将找到的范围与搜索范围进行比较。如果找到的范围在最开始时,则它是一个双(或三重)\r
-componentsSeparatedByCharactersFromSet:
(NSString
)返回一个数组,其中字符串以\r
分隔。此数组中的空字符串是双字符串(或三字符串)\r
。只需用\r
替换它们,然后用空格重新连接组件。您应该使用
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"];
你试过regex吗?
您只能捕获一个\n
单独出现而没有另一个\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:@""];
我认为您需要编写自己的方法来检查\n或\r是否多次出现,并作出相应的反应。这可能会有帮助。您可以向我们显示您正在处理的内容的文本摘录,以及结果应该是什么吗?我想在单次出现\n时替换。例如:h\n e\n l\n l\n o\n\n w\n o\n r\n l\n d应显示为hello和world,但hello和world之间的行数应保持不变(在本例中为3)hello\n\n world我希望在出现一次时替换\n。例如:h\n e\n l\n l\n o\n\n w\n o\n r\n l\n d应显示为hello和world,但hello和world之间的行数应保持不变(在本例中为3)hello\n\n world然后修改正则表达式以仅查找\n的一个实例(即,不超过一个连续实例),以便仅替换/删除这些实例。例子不胜枚举。