OGeek|极客世界-中国程序员成长平台

标题: ios - 在 iOS 上用多个正则表达式替换文本 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 17:53
标题: ios - 在 iOS 上用多个正则表达式替换文本

我对在 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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4