regex - 正则表达式 stringByReplacingMatchesInString (替换引号字符串中的空格)
问题描述
上下文是一个 IOS 应用程序。我想替换用括号括起来的空格。
前任:
Toto "is Bill" 应该变成 Toto "is#Bill"
天气“晴朗”应该变成“天气晴朗#and#clear”
我根据另一篇文章使用以下代码进行了 试验
NSString *pattern = @"(?:(?<=^\")(\\s+))|(?:(?!^\")(\\s+)(?=.))|(?:(\\s+)(?=\"$))"; // (?:(?<=^")(\s+))|(?:(?!^")(\s+)(?=.))|(?:(\s+)(?="$))
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"#"];
NSLog(@"modified %@", modifiedString);
但这不正常。
所有空格都被替换(Toto#"is#Bill")
我只用 (?:(?!^")(\s+)(?=.)) 得到相同的结果
我自己做了一个 (?:\"\S*)(\s)(?:\S*) 也不行
我会很感激这方面的帮助!谢谢
解决方案
这是一个解决方案,我正在使用。这可能并不完美,但它可以满足我的需求。
正如 Wiktor Stribiżew 指出的那样,我的问题是我的模式的第一个字符和最后一个字符是同一个字符“他向我提出了一个解决方案,我觉得这有点矫枉过正,但这是必要的,因为 Objective C 中没有回调函数。
作为替代方案,这是我解决问题的方法(替换搜索框的引号字符串中的空格):
1)我在“搜索框”字符串的末尾添加了一个空格
NSString * searchstring1 = [searchString stringByAppendingString:@" "];
2)我使用以下正则表达式替换空格 (?:(?<="^"])(?=\w)|[^\S"])(?=[^"] "\s)
NSString *pattern = @"(?:(?<=\"^\"])(?=\\w)|[^\\S\"])(?=[^\"]*\"\\s* )"; // (?:(?<="^"])(?=\w)|[^\S"])(?=[^"]*"\s* )
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSString *searchstring2 = [regex stringByReplacingMatchesInString:searchstring1 options:0 range:NSMakeRange(0, [searchstring1 length]) withTemplate:@"xxx"];
NSLog(@"modified %@", searchstring2);
3)我隔离所有要搜索的标记(用空格分隔)
NSMutableArray *words = (NSMutableArray *)[searchstring2 componentsSeparatedByString:@" "];
4)恢复带引号的字符串中的空格并删除引号
NSString *token;
for(token in words)
{
token = [token stringByReplacingOccurrencesOfString:@"xxx" withString:@" "];
token = [token stringByReplacingOccurrencesOfString:@"\"" withString:@""];
NSLog(@"token %@\n", token);
}
以下搜索字符串:Bill“天气晴朗”酷 将给出以下输出
代币比尔
象征着天气晴朗
令牌很酷
希望它可以帮助别人。
推荐阅读
- reactjs - 使用 useState 更新或创建 Element
- reactjs - React - 在第一次渲染之前初始化状态并访问状态
- powershell - 在 Teams 中禁用欢迎消息时出错
- java - 试图计算下面这段代码的时间复杂度
- git - 编码 git + powershell 的问题
- javascript - props 的大小会影响 React 组件的性能吗?
- python - 非字母的正则表达式或什么都没有
- c - NUCLEO F401RE 通过 UART 向 nRF DK 板发送错误数据
- bash - 如何在 bash 别名定义中使用控制字符
- powershell - 如何从通过 powershell 从 Teams 导出的 csv 文件中获取 samAccountName