Iphone 如何检测字符串末尾是否包含标点符号?

Iphone 如何检测字符串末尾是否包含标点符号?,iphone,objective-c,cocoa-touch,string,nsstring,Iphone,Objective C,Cocoa Touch,String,Nsstring,假设我有字符串: “你好,我喜欢你的鞋子#今天…” 我正在按空格标记字符串: return [string componentsSeparatedByString:@" "]; 因此,我的数组包含: Hello I like your shoes #today...! 我想重点关注“#今天…!”任何前缀中有#的单词,我正在更改字体颜色 我如何确保只有“今日”的字体颜色发生了变化 我基本上想知道一个单词的末尾是否有标点符号,并更改标点符号前面字符的颜色。考虑使用以下方法: - (NSRange

假设我有字符串:

“你好,我喜欢你的鞋子#今天…”

我正在按空格标记字符串:

return [string componentsSeparatedByString:@" "];
因此,我的数组包含:

Hello
I
like
your
shoes
#today...!
我想重点关注“#今天…!”任何前缀中有#的单词,我正在更改字体颜色

我如何确保只有“今日”的字体颜色发生了变化

我基本上想知道一个单词的末尾是否有标点符号,并更改标点符号前面字符的颜色。

考虑使用以下方法:

- (NSRange)rangeOfRegex:(NSString *)regex
                options:(RKLRegexOptions)options
                inRange:(NSRange)range
                capture:(NSInteger)capture
                  error:(NSError **)error;
您需要的正则表达式类似于
@“#\\S+\\b”
。这个正则表达式表示“查找一个“#”字符,后跟一个或多个非空格字符,后跟一个单词边界”

然后,这将返回要匹配的字符串中匹配正则表达式的范围。

请考虑使用和此方法:

- (NSRange)rangeOfRegex:(NSString *)regex
                options:(RKLRegexOptions)options
                inRange:(NSRange)range
                capture:(NSInteger)capture
                  error:(NSError **)error;
您需要的正则表达式类似于
@“#\\S+\\b”
。这个正则表达式表示“查找一个“#”字符,后跟一个或多个非空格字符,后跟一个单词边界”


这将返回要匹配的字符串中匹配正则表达式的范围。

我被你的问题弄糊涂了。您是要检测结尾带有标点符号还是开头带有#符号的字符串

无论如何:

for (NSString *word in [string componentsSeparatedByString:@" "]) {
    if ([word hasPrefix:@"#"])NSLog(@"%@ starts with #",word);
    if ([word hasSuffix:@"!"])NSLog(@"%@ end with !",word);
}

你的问题把我弄糊涂了。您是要检测结尾带有标点符号还是开头带有#符号的字符串

无论如何:

for (NSString *word in [string componentsSeparatedByString:@" "]) {
    if ([word hasPrefix:@"#"])NSLog(@"%@ starts with #",word);
    if ([word hasSuffix:@"!"])NSLog(@"%@ end with !",word);
}

你可以这样做:

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
}
NSRange putchCharRange=[word rangeOfCharacterFromSet:[NSCharacterSet标点字符集]];
对于(int i=0;i
您可以执行以下操作:

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
}
NSRange putchCharRange=[word rangeOfCharacterFromSet:[NSCharacterSet标点字符集]];
对于(int i=0;i
以下代码应从
单词的末尾开始查看,直到找到非字母数字的字符,测试是否找到此类字符,如果找到,则删除该字符后面的任何内容。(未测试代码)


以下代码应从
word
的末尾开始查看,直到找到非字母数字的字符,测试是否找到此类字符,如果找到,则删除该字符后面的任何内容。(未测试代码)


我尝试标记所有以#开头的单词,并根据nspuncationCharacterSet将其拆分。这是可行的,但是我丢失了标点符号。

我尝试标记所有以#开头的单词,并根据nspuncationCharacterSet将其拆分。这是可行的,但是我丢失了标点符号。

我希望能够处理后缀中的任何标点符号。所以在这个例子中,我想切掉。。。!让我的单词是#今天#另一个例子可能是“#今天,你好!”我只想能够解析#今天我想能够处理后缀中的任何标点符号。所以在这个例子中,我想切掉。。。!还有一个例子可以是“今天,你好!”我只想解析“今天”,我想你的
putcharrange.location
对于任何以
开头的
单词都可能是
0
,这就是为什么我使用了
选项:nsbackardsSearch
字母数字字符集
不在
标点字符集
中,所以我认为这应该很好——两种实现都应该可以工作(尽管针对字母数字字符集进行测试也会选择非标点符号,这可能是好事,也可能不是好事).1.ah,好的,因此根据要从字符串末尾删除的字符,您和我的方法可能都需要更改以使用不同的/自定义字符集。我认为您的
putcharrange.location
对于任何
单词
都可能是
0
,这就是我使用的原因<代码>选项:NSBackardsSearch
字母数字字符集
#
不在
标点字符集
中,因此我认为这应该是好的——两种实现都应该可以工作(尽管针对
字母数字字符集
进行测试也会选择非标点符号,这可能是好事,也可能不是好事).1.ah,好的,因此根据要从字符串尾部删除的字符,您的方法和我的方法可能都需要更改以使用不同的/自定义字符集。正则表达式为
\w+\b
(或
@“\\\w+\\b”
,请记住在字符串文本中将这些反斜杠加倍)可能是一个更好的选择。
\w+
将匹配“单词字符”,而
\S+
匹配“非空白字符”。如果您必须处理“非拉丁”单词和语言,正则表达式
(?w)#\w+\b
可能是一个更好的选择
激活增强的分词功能。我将编辑并添加转义--doh!关于
\w+\b
(或
@“#\\w+\\b”
的?w.A正则表达式的要点非常好,记住在字符串文本中加倍这些反斜杠)