使用正则表达式检查字符串中的第三个字符

Posted

技术标签:

【中文标题】使用正则表达式检查字符串中的第三个字符【英文标题】:Checking third character in string using regex 【发布时间】:2013-02-04 12:38:01 【问题描述】:

我必须检查字符串中的第三个字符。我正在尝试使用 NSPredicate 来做到这一点。我认为正则表达式应该是 ..3* 所以它会找到每个字符串的第三个字符 3。但它不起作用,我确实尝试了其他一些方法但没有成功:(。有人可以帮助我吗?

简单的检查代码

- (IBAction)btnCheckPerformClick:(id)sender 
_chkOk.state = NO;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like[c] %@", _txtRegExpression.stringValue];
NSLog(@"%@", predicate);
if([predicate evaluateWithObject:_txtCheckingText.stringValue])
    _chkOk.state = YES;

谢谢

【问题讨论】:

【参考方案1】:

谓词格式语言中的LIKE 运算符只能理解简单的通配符(?*)。如果要使用正则表达式,则需要使用MATCHES

有关详细信息,请参阅Predicate Programming Guide (String Comparisons)。

或者,使用NSRegularExpression

【讨论】:

很好,它与..3.* 合作。我也在尝试这个,但只是使用..3* 如果您只使用..3 作为您的正则表达式,它将匹配 blahblah3blah。确保按照我的回答锚定它。 不是真的。 ..3 将仅匹配 aa3 而不是 aa3aaaaaa3aa【参考方案2】:

你又少了一个点 - 使用..3.*。您可能还想使用^..3.*$ 将其锚定到字符串的开头和结尾。

【讨论】:

您不需要该正则表达式末尾的.*$,它对此用例没有任何作用。 可能不会,但在处理多行输入时可能会有所不同。 Predicate:SELF LIKE[c] "^..3.*$" SearchingText:aa3aaa 一样,不行。【参考方案3】:

..3* 表示输入中任意两个字符后跟可选的 3。你想要^..3,这意味着任何两个字符后跟3,从行首开始。

【讨论】:

Predicate:SELF LIKE[c] "^..3" SearchingText:aa3aaa 不起作用 正如@omz 所指出的,您需要对正则表达式使用 MATCHES 而不是 LIKE。【参考方案4】:
..3*

那个正则表达式不符合你的要求。

它说,任意两个字符,然后是任意数量的 3(包括没有 3)

这个怎么样?

^..3.*$

【讨论】:

【参考方案5】:

您还可以考虑使用NSString 方法subStringWithRange: 代替吗? 如果您对正则表达式不满意,请不要急于使用它。使用有效的东西。 Cocoa 的正则表达式实现并不是最容易上手的。 抓住你的字符串,然后将它与任何东西进行比较。 您可以遍历字符串以同样轻松地获取每个第 3 个字符。

NSString *aString = @"abc";
NSString *thirdCharacterOnly;
if (aString.length >= 3) 

    for (NSUInteger i = 2; i < aString.length; i += 3) 
        thirdCharacterOnly = [aString substringWithRange:NSMakeRange(2, 1)];
        if ([thirdCharacterOnly isEqualToString:@"3"]) 
                // Do something.
        
    

 else 
        // do something different.

如果您想了解更多关于正则表达式的信息,请获取THE book。 3章让你快速上手。首先使用 Ruby、Python 或 Perl 学习正则表达式。它会拯救你的大脑。

【讨论】:

以上是关于使用正则表达式检查字符串中的第三个字符的主要内容,如果未能解决你的问题,请参考以下文章

用于检查 4 个不同字符组中的至少 3 个的正则表达式

正则表达式基于空格引号和括号进行拆分

Python re模块与正则表达式详解

正则表达式简明笔记

在Java中,如何在没有正则表达式的情况下查找字符串中的第一个字符是不是为大写

批处理正则表达式怎样替换第二个指定字符