简而言之:
给出以下字符串:
输入字符串 - > “你好,世界”,哦,我的,parapappa12
我想提取这三个“代币”:
输出令牌 - >
在ios中对字符串进行标记
我有一个包含一些数据的文件。它看起来像:
word , word, word
word , word, word
word , word, word
其中一些单词可以包含“,”,但仅当单词以某个字符开头和结尾时才会出现,例如。以“结束”开头
单词示例:
word : blebla bla bla
word : "bla bla bla, bla"
如何定义一个正则表达式来根据单词之间的“,”加入白色空格来标记文件,并包括这个“特殊”的情况?
我记得在Perl中使用正则表达式来实现类似的东西,但很久以前我忘记了语法,我不确定Objective-C和iOS是否支持
答案 0 :(得分:1)
首先,Perl oneliner(此处为fullscreen):
# echo -n '"hello, world" , oh my, parapappa12' | perl -ne 'print "<$1>\n" while /("[^"]*"|[^, ]+)/g'
<"hello, world">
<oh>
<my>
<parapappa12>
NSString* const str = @"\"hello, world\" , oh my, parapappa12";
[self splitCommas:str];
- (void)splitCommas:(NSString*)str
{
NSString* const pattern = @"(\"[^\"]*\"|[^, ]+)";
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern
options:0
error:nil];
NSRange searchRange = NSMakeRange(0, [str length]);
NSArray *matches = [regex matchesInString:str
options:0
range:searchRange];
for (NSTextCheckingResult *match in matches) {
NSRange matchRange = [match range];
NSLog(@"%@", [str substringWithRange:matchRange]);
}
}
正则表达式的解释:
"[^"]*"
(除了引用之外的任何内容)[^, ]+
(除了逗号或空格之外的任何内容)(方括号定义&#34;字符类&#34;插入符号否定它。)
注意:我的解决方案无法处理"I say \"Hello\""
答案 1 :(得分:0)
在不知道你为什么需要解析这样的字符串的上下文的情况下,我无法给你一个很好的答案,但如果你发现自己需要解析一些更复杂的东西,我这里的一些想法可能比RegEx更好或者如果您想了解有关状态机和语法的更多信息。
NSScanner
进行基本解析(该链接中的代码不是很好,所以请忽略它,但说明的概念)您似乎满足于RegEx,但也许这将有助于未来的访问者。