gpt4 book ai didi

objective-c - Objective C 中使用正则表达式和 nsarray 进行字符串操作以及可变字符串

转载 作者:行者123 更新时间:2023-12-03 17:53:28 35 4
gpt4 key购买 nike

我正在尝试以非常自定义的格式解析文本文件中的数据。

 Ronaldo : 1, Messi : 1, Owen,Beckham : 2, Mario|Terry : 1, Lampard,Pele : 3

这是文本文件中的内容,我使用正则表达式模式捕获它:([^\r\n\\s]*)\\s*:\\s*([^\r\n\\s]*)//objectiveC

一个简单的 NSLog(@"%@ = %@", group1, grump2) 捕获 : 之间的键和值。

Ronaldo = 1,
Messi = 1|2,
Owen,Beckham = 2
Mario|Terry = 1,
Lampard,Pele = 3
/*
`|` means "OR", Mario OR Terry = 1
`,` means "AND", Lampard AND Pele = 3
*/

我现在想将它们转换为以下 NSArray,但我对此一无所知。

array1 = ["Ronaldo=1" , "Messi=1" , "Owen,Becham=2", "Mario=1", "Lampard,Pele=3"]
array2 = ["Ronaldo=1", "Messi=1", "Owen,Becham=2", "Terry=1", "Lampard,Pele=3"]

刚刚发生的是,基于 OR| 字符创建两个数组。

自从Mario|Terry = 1以来,我想要一组独立包含两者的数组。

类似地,如果另一组中有三个选择,Mueller|Hargreves|Anelka,我应该对每个选项都有三个数组集,而不是包含所有选项的数组。

不知何故,我无法将其翻译成代码,到目前为止,我已经尝试了很多方法,但没有成功。 for 循环的复杂性突然出现。例如。

这是在[NSRegularExpression enumerateMatchesInString...]代码块内

       for(NSString *player in OptionalPlayerArray)
{
NSMutableArray *optionalarr =[NSMutableArray new];


for(NSString *value in valueChoices)
{
NSString *datastring = [NSString stringWithFormat:@"%@:%@",player,value]
[optionalarr addObject:[datastring]];
}

}

您会看到一个双 for 循环,valueChoices 数组还说明了值中的选择/选项。就像兰帕德=1|2

编辑:

嵌套的 for 循环旨在与可选值相关。兰帕德=1|2。我认为这“也”很容易做到。我错了。因此,请忽略嵌套循环,我可以没有可选值,而是完全专注于可选键:Lampard|Mario=1

但这让我无处可去。请让我知道我的选择是什么,也许是不同的正则表达式方法?如有任何帮助,我们将不胜感激。

最佳答案

希望这不是家庭作业。

int main(int argc, const char * argv[])
{

@autoreleasepool {

NSArray *data = @[
@"Ronaldo : 1",
@"Messi : 1",
@"Owen,Beckham : 2",
@"Mario|Terry : 1",
@"Lampard,Pele : 3",
@"Wally|Molly|Golly : 5",
@"Homework : 0"
];

// prime answers with a single empty entry
__block NSMutableArray *answers = [NSMutableArray array];
[answers addObject:[NSMutableArray array]];

NSRegularExpression *re;
re = [NSRegularExpression regularExpressionWithPattern:@"([^\r\n\\s]*)\\s*:\\s*([^\r\n\\s]*)"
options:0
error:nil];
for (NSString *line in data) {
[re enumerateMatchesInString:line
options:0
range:NSMakeRange(0, [line length])
usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop)
{
NSString *lhs = [line substringWithRange:[match rangeAtIndex:1]];
NSString *rhs = [line substringWithRange:[match rangeAtIndex:2]];
NSArray *players = [lhs componentsSeparatedByString:@"|"];
if ([players count] == 1) {
NSString *p = [players objectAtIndex:0];
for (NSMutableArray *a in answers) {
[a addObject:[NSString stringWithFormat:@"%@=%@",p,rhs]];
}
} else {
NSMutableArray *newanswers = [NSMutableArray array];
for (NSString *p in players) {
NSMutableArray *pa = [NSMutableArray array];
for (NSMutableArray *a in answers) {
[pa addObject:[a mutableCopy]];
}
for (NSMutableArray *a in pa) {
[a addObject:[NSString stringWithFormat:@"%@=%@",p,rhs]];
}
[newanswers addObjectsFromArray:pa];
}
answers = newanswers;
}
}
];
}

NSLog(@"%@",answers);
}
return 0;
}

关于objective-c - Objective C 中使用正则表达式和 nsarray 进行字符串操作以及可变字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18168439/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com