gpt4 book ai didi

objective-c - 正则表达式 stringByReplacingMatchesInString

转载 作者:行者123 更新时间:2023-12-03 16:54:39 26 4
gpt4 key购买 nike

我正在尝试删除字符串中的任何非字母数字字符。我尝试了以下代码片段,但它没有替换适当的字符。

NSString *theString = @"\"day's\"";

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^\\B\\W^\\B" options:NSRegularExpressionCaseInsensitive error:&error];

NSString *newString = [regex stringByReplacingMatchesInString:theString options:0 range:NSMakeRange(0, [theString length]) withTemplate:@""];

NSLog(@"the resulting string is %@", newString);

最佳答案

由于需要保留字符串中的引号,因此正则表达式必然会变得有点复杂。

这是一个可以做到这一点的:

(?:(?<=^")(\W+))|(?:(?!^")(\W+)(?=.))|(?:(\W+)(?="$))

它使用lookbehind和lookahead来匹配引号,而不将它们包含在捕获组中,因此在用空字符串替换时它们不会被删除。

这三个部分分别处理起始引号、中间的所有字符和最后一个引号。

这有点行人,必须有一种更简单的方法来做到这一点,但我还没有找到它。欢迎其他人参与!

NSString *theString = @"\"day's\"";

NSString *pattern = @"(?:(?<=^\")(\\W+))|(?:(?!^\")(\\W+)(?=.))|(?:(\\W+)(?=\"$))";


NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: pattern
options: 0 // No need to specify case insensitive, \W makes it irrelevant
error: &error];

NSString *newString = [regex stringByReplacingMatchesInString: theString
options: 0
range: NSMakeRange(0, [theString length])
withTemplate: @""];

(?:) 构造创建一个非捕获括号,这意味着您可以将后向(或先行)组和“真实”捕获组保持在一起,而无需创建封装实际捕获组整个括号。如果没有它,您就不能只替换一个空字符串,否则它将全部被删除。

关于objective-c - 正则表达式 stringByReplacingMatchesInString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16463249/

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