Ios 从中间截断NSString的子字符串

Ios 从中间截断NSString的子字符串,ios,uilabel,nsattributedstring,Ios,Uilabel,Nsattributedstring,如何从中间截断NSString中的子字符串 比如说,我有一根绳子 NSString*str=@“2014年11月25日星期四/Shared/Documents/Drawing/c” 我想从中间截断路径字符串并在标签上显示它。为此,我在标签上使用NSStrinbuteString NSString *path = @"/Shared/Documents/Drawing/c"; NSString *date = @"Thu 25 Nov 2014"; NSString *wholeString =

如何从中间截断NSString中的子字符串 比如说,我有一根绳子 NSString*str=@“2014年11月25日星期四/Shared/Documents/Drawing/c” 我想从中间截断路径字符串并在标签上显示它。为此,我在标签上使用NSStrinbuteString

NSString *path = @"/Shared/Documents/Drawing/c";
NSString *date = @"Thu 25 Nov 2014";
NSString *wholeString = self.descLabel.text;
NSRange pathRange = [wholeString rangeOfString:path];
NSRange range=NSMakeRange(pathRange.location,path.length);

NSMutableParagraphStyle* style= [NSMutableParagraphStyle new];
style.lineBreakMode= NSLineBreakByTruncatingMiddle;


NSMutableAttributedString* str=[[NSMutableAttributedString alloc]initWithString: self.descLabel.text];
[str addAttribute: NSParagraphStyleAttributeName value: style range: range];
self.descLabel.attributedText= str;

这似乎没什么用。Cn有人建议我是否做错了什么事吗?

这是一个使用非常简单的正则表达式的不太优化的例子。本例要求路径以正斜杠开始,并且路径始终是最后一条

NSString *test = @"Thu 25 Nov 2014 /Shared/Documents/Drawing/c";
NSString *resultPath = @"";
// Create a range for it. We do the replacement on the whole
// range of the text, not only a portion of it. This can be optimized.
NSRange range = NSMakeRange(0, test.length);

NSError *errors = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(/.*)" options:NSRegularExpressionCaseInsensitive|NSRegularExpressionDotMatchesLineSeparators error:&errors];

NSArray *matches = [regex matchesInString:test options:NSMatchingProgress range:range];
if(matches.count == 1 && !errors) {
    NSTextCheckingResult* result = matches[0];
    // One result found
    resultPath = [test substringWithRange:result.range];
} else {
    // many results found or error
}
结果路径现在将包含:“/Shared/Documents/Drawing/c”

现在,您可以简单地将结果添加到标签或将其添加到属性字符串中,以获得更多类似于您已经完成的自定义功能


正如我一开始说的。这是一个非常基本的正则表达式示例。

OP似乎只想标识路径的范围,以便将属性应用于属性字符串的该部分。我认为这个问题的标题有误导性<代码>结果。范围包含搜索的范围。然后确定。OP的代码在查找范围方面看起来不太糟糕,为了进一步误导我们,我想他们想知道为什么
NSLineBreakByTruncatingMiddle
属性没有效果。@特洛伊人你说得很对。我再次阅读了这个问题,是的,它写得不太好,但我会留下答案供将来参考。请投票选择努力和态度以及合适的代码。如果是UILabel,为什么不直接在UILabel上设置linebreakmode,而不是简单的文本,而不使用属性字符串?