替换包含 objective C 中变量的字符串的特定部分
Replace a specific part of a string that includes a variable in objective C
我花了几个小时试图解决这个问题,但没有成功。
我有一个字符串,称之为 FileContent,它包含我需要修改的 UTF-8 编码文件的内容。
此 FileContent 有一个特定部分,其中包含我需要查找、替换然后覆盖原始文件的变量。我知道如何在找到该部分后替换该部分,然后覆盖原始文件,但我很难找到具有变量本身的部分。
该变量由随机数字和随机长度的字母组成,用于唯一标识单个用户的会话。
这是变量在读入 FileContent 的文件部分中的显示方式:
+option1 (variable) +option2
周围的文字(+option1和+option2)和空格是不变的,便于手动定位。此部分是必须保持完整的较长行的一部分。
我试过NSRegularExpression:regularExpressionWithPattern:使用各种通配符,用\转义“+”,但总是returns:
The value “+option1 ... +option2” is invalid.
我尝试了 documentation 中的所有通配符以及它们的各种组合,以及我在其他已回答问题中找到的,例如
".*\+option1 (.*) \+option2.*".
NSRegularExpression 不适合这个任务吗?
我应该改用 NSRange 还是 NSScanner,也许是完全不同的东西?
正如 John Elemans 所提到的,如果 +option1 和 +option2 是固定且唯一的,您可以简单地使用 rangeOfString 来执行此操作。首先,你需要找到两者的索引:
// FileContent now holds ".... +option1 yourString +option2 ...."
int idx1 = [FileContent rangeOfString:@"+option1"].location;
int idx2 = [FileContent rangeOfString:@"+option2"].location;
int len2 = [@"+option2" length];
if ((idx1>=0)&&(idx2>=0)) {
NSString *str= [FileContent substringWithRange:NSMakeRange(idx1, idx2+len2-idx1)];
// now str holds "+option1 yourString +option2"
// split this into array
NSArray *arr = [str componentsSeparatedByString:@" "];
// now array arr has [+option1,yourString,+option2]
// So you can get your string by arr[1];
NSLog(@"MyString %@",arr[1]);
}
请注意,如果更改选项 1 和 2 的名称或更改它们的顺序,这将会中断。另请注意,我尚未测试此代码。它可能会在 nsmakerange 区域中断...请正确检查 index/length。
我花了几个小时试图解决这个问题,但没有成功。 我有一个字符串,称之为 FileContent,它包含我需要修改的 UTF-8 编码文件的内容。
此 FileContent 有一个特定部分,其中包含我需要查找、替换然后覆盖原始文件的变量。我知道如何在找到该部分后替换该部分,然后覆盖原始文件,但我很难找到具有变量本身的部分。
该变量由随机数字和随机长度的字母组成,用于唯一标识单个用户的会话。
这是变量在读入 FileContent 的文件部分中的显示方式:
+option1 (variable) +option2
周围的文字(+option1和+option2)和空格是不变的,便于手动定位。此部分是必须保持完整的较长行的一部分。
我试过NSRegularExpression:regularExpressionWithPattern:使用各种通配符,用\转义“+”,但总是returns:
The value “+option1 ... +option2” is invalid.
我尝试了 documentation 中的所有通配符以及它们的各种组合,以及我在其他已回答问题中找到的,例如
".*\+option1 (.*) \+option2.*".
NSRegularExpression 不适合这个任务吗? 我应该改用 NSRange 还是 NSScanner,也许是完全不同的东西?
正如 John Elemans 所提到的,如果 +option1 和 +option2 是固定且唯一的,您可以简单地使用 rangeOfString 来执行此操作。首先,你需要找到两者的索引:
// FileContent now holds ".... +option1 yourString +option2 ...."
int idx1 = [FileContent rangeOfString:@"+option1"].location;
int idx2 = [FileContent rangeOfString:@"+option2"].location;
int len2 = [@"+option2" length];
if ((idx1>=0)&&(idx2>=0)) {
NSString *str= [FileContent substringWithRange:NSMakeRange(idx1, idx2+len2-idx1)];
// now str holds "+option1 yourString +option2"
// split this into array
NSArray *arr = [str componentsSeparatedByString:@" "];
// now array arr has [+option1,yourString,+option2]
// So you can get your string by arr[1];
NSLog(@"MyString %@",arr[1]);
}
请注意,如果更改选项 1 和 2 的名称或更改它们的顺序,这将会中断。另请注意,我尚未测试此代码。它可能会在 nsmakerange 区域中断...请正确检查 index/length。