让我们假设我有字符串:
“你好我喜欢你的鞋#today ......!”
我用空格对字符串进行标记:
return [string componentsSeparatedByString:@" "];
所以我的数组包含:
Hello
I
like
your
shoes
#today...!
我想专注于“#today ......!”我在改变字体颜色的前缀中有#的任何单词。
如何确保只有“#today”的字体颜色发生变化?
我基本上想知道一个单词的末尾是否有标点符号,并在标点符号前更改字符的颜色。
答案 0 :(得分:2)
考虑使用RegexKitLite和此方法:
- (NSRange)rangeOfRegex:(NSString *)regex
options:(RKLRegexOptions)options
inRange:(NSRange)range
capture:(NSInteger)capture
error:(NSError **)error;
你想要的正则表达式就像@"#\\S+\\b"
。这个正则表达式说“找一个'#'字符后跟一个或多个非空格字符后跟一个单词边界”。
然后,这将返回字符串中匹配的正则表达式的范围以匹配。
答案 1 :(得分:2)
我对你的问题感到困惑。您是在尝试检测末尾带有标点符号的字符串还是在开头使用#标记?
无论如何:
for (NSString *word in [string componentsSeparatedByString:@" "]) {
if ([word hasPrefix:@"#"])NSLog(@"%@ starts with #",word);
if ([word hasSuffix:@"!"])NSLog(@"%@ end with !",word);
}
答案 2 :(得分:2)
您可以执行以下操作:
if ([[NSCharacterSet symbolCharacterSet] characterIsMember:[word characterAtIndex:0]]) NSLog(@"%@", word);
这是为了测试字符串开头的符号 - 要在最后测试,你会使用[word characterAtIndex:([word length] - 1)]
编辑:好的,我想我现在明白了这个问题。如果您只想在颜色设置之前更改字符的颜色,您可以执行以下操作:
NSRange punctCharRange = [word rangeOfCharacterFromSet:[NSCharacterSet punctuationCharacterSet]];
for (int i = 0; i < punctCharRange.location; i++) {
//change the color of the character
}
答案 3 :(得分:1)
以下代码应从word
的末尾开始,直到找到不是字母数字的字符,如果找到这样的字符则进行测试,如果找到,则删除该字符后的任何内容。 (未经测试的代码)
NSString *wordWithoutTrailingNonAlphanum;
NSRange firstNonAlphanumCharFromEnd =
[word rangeOfCharacterFromSet:[NSCharacterSet alphanumericCharacterSet]
options:NSBackwardsSearch];
if (firstNonAlphanumCharFromEnd.location != NSNotFound) {
wordWithoutTrailingNonAlphanum =
[word substringToIndex:(firstNonAlphanumCharFromEnd.location + 1)];
}
答案 4 :(得分:0)
我尝试将所有以#开头并基于NSPunctuationCharacterSet拆分的单词进行标记。这有效,但是我丢失了标点符号。