我正在尝试使用NSRegularExpression解析一个字符串,以便我可以在预定义的短语之间提取几个字符串:
NSString* theString = @"the date is February 1st 2000 the place is Los Angeles California the people are Peter Smith and Jon Muir";
NSString *pattern = @"(?:the date is )(.*?)(?: the place is )(.*?)(?: the people are )(.*?)";
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* matches = [regex matchesInString:theString options:0 range:NSMakeRange(0, theString.length)];
我期待得到3场比赛:
2000年2月1日 加州洛杉矶 Peter Smith和Jon Muir
然而,看起来我没有正确地使用正则表达式组。有什么建议吗?
答案 0 :(得分:1)
选项1:使用群组匹配
the date is\s*(.*?)\s*the place is\s*(.*?)\s*the people are (.*)
请参阅demo(确保查看右下方窗格中的论坛)
当然可以进一步调整。 :)
这个想法是括号将你想要的文本捕获到第1组,第2组和第3组。
This question提供了在Objective C中检索组匹配的语法。
选项2:直接匹配,使用外观
有点笨拙:
(?<=the date is ).*?(?=\s*the place is)|(?<=the place is ).*?(?=\s*the people are)|(?<=the people are ).*
请参阅demo