• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 在 iOS 上用多个正则表达式替换文本

[复制链接]
菜鸟教程小白 发表于 2022-12-12 17:53:45 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我对在 iOS 中使用 regex 还是很陌生,我正在试验它。我正在努力寻找解决我遇到的问题的方法。如果之前已经回答过这个问题,或者我只是错过了一些非常明显的东西和/或使用错误的工具来实现我的目标,我会提前道歉。

我有一个字符串,用户将在 textfield 中输入该字符串。然后如何更改它以更正字符串中包含的单词的拼写?

NSString *userstring = @"Jon Travalta";
NSError *error = NULL;
NSString *modstring = @"";

NSRegularExpression *regex = [[NSRegularExpression alloc]init];
regex = [NSRegularExpression regularExpressionWithPattern"(Jon|Johnathan|Jonathen|John)\\s(Travalta|Travalte|Travelta|Travolta)" options:NSRegularExpressionCaseInsensitive error:&error];

modstring = [regex stringByReplacingMatchesInString:userstring options:0 range:NSMakeRange(0,[userstring length]) withTemplate"John Travolta"];

这可以正常工作并纠正字符串,但假设字符串是别的东西。我想保持该正则表达式处于事件状态以检查字符串是否包含任何要纠正的元素。

假设字符串在上述检查之前设置为“Anthony Hopkin”。然后,我还将使用另一个 regexwithpattern 来检查字符串,以使用正确的名称拼写来更正那个字符串。

regex = [NSRegularExpression regularExpressionWithPattern"(Anthony|Antony|Tony|)\\s(Hopkin|Hapkin|Hopkins)" options:NSRegularExpressionCaseInsensitive error:&error];

modstring = [regex stringByReplacingMatchesInString:userstring options:0 range:NSMakeRange(0,[userstring length]) withTemplate"Anthony Hopkins"];

这会将字符串替换为 Anthony Hopkins,即使它是第一个字符串。

如果我对 NSRegularExpression 和不同的 stringByReplacingMatchesInString 进行不同的分配,它不会做任何事情并且字符串会保持原来的状态。



Best Answer-推荐答案


正则表达式不是拼写检查的正确工具。

在您的问题中,您想根据正则表达式进行多次替换。为清楚起见,我将遍历您的可能更正列表,一次应用一个。

-(NSString*) naiiveSpellCheckStringNSString*) s {

  NSDictionary* corrections = @{
                                @"Travolta": @"Travalta|Travalte|Travelta|Travolta",
                                @"John": @"Jon|Johnathan|Jonathen",
                                @"Anthony""Anthoni|Antony|Tony",
                                @"Hopkins": @"Hopkin|Hapkin",
                                };

  for (NSString* key in corrections.keyEnumerator) {

      NSError* error;
      NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:[corrections objectForKey:key]
                                    options:NSRegularExpressionCaseInsensitive
                                    error:&error];

      NSAssert1(!error, @"Error parsing regex %@", [corrections objectForKey:key]);

      s = [regex stringByReplacingMatchesInString:s
                                          options:0
                                            range:NSMakeRange(0, s.length) withTemplate:key];

  }

  return s;
}

关于ios - 在 iOS 上用多个正则表达式替换文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34317900/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap