【问题标题】:iOS - NSString regex matchiOS - NSString 正则表达式匹配
【发布时间】:2015-04-16 09:46:13
【问题描述】:

我有一个字符串例如:

NSString *str = @"Strängnäs"

然后我用*替换斯堪的纳维亚字母的方法,所以它会是:

NSString *strReplaced = @"Str*ngn*s"

我需要一个函数来匹配strstrReplaced。换句话说,* 应该被视为任何字符(* 应该与任何字符匹配)。

我怎样才能做到这一点?

Strängnäs should be equal to Str*ngn*s

编辑:

也许我不够清楚。我希望 * 被视为任何字符。所以在做[@"Strängnäs" isEqualToString:@"Str*ngn*s"]时应该返回YES

【问题讨论】:

  • 你有没有想过用 ASCII(7 位)处理你的字符串(所有斯堪的纳维亚字符都将被替换为?),然后替换所有的?带 *.
  • 目前还不清楚你想做什么。什么是“斯堪的纳维亚”字母,您有 Unicode 范围,还是只是它们的列表?您是否只想用星号替换某些输入字符串中的它们?那为什么第一个Strängnäs还有ä?请具体。

标签: ios objective-c regex nsstring match


【解决方案1】:

考虑到斯堪的纳维亚字母不是 ASCII,我认为以下正则表达式模式将匹配所有非 ASCII 文本:

[^ -~]

单独处理每一行以避免匹配换行符并将匹配替换为*。

演示:https://regex101.com/r/dI6zN5/1

编辑:

这是基于上述优化的模式:

[^\000-~]

演示:https://regex101.com/r/lO0bE9/1

编辑 1:根据您的评论,您需要一个 UDF(用户定义的函数):

  • 接受斯堪的纳维亚字符串
  • 将其所有斯堪的纳维亚字母转换为 *
  • 接受带星号的字符串
  • 比较两个字符串
  • 如果两个字符串匹配则返回True,否则返回false。

然后您可以像CompareString(ScanStr,AsteriskStr) 一样使用UDF。

【讨论】:

  • 感谢您的代码。但这不是问题,请检查我的编辑。
【解决方案2】:

我使用 JLILI Amen

发布的正则表达式创建了一个代码示例

代码

NSString *string = @"Strängnäs";
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^ -~]" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"*"];
NSLog(@"%@", modifiedString);

输出

Str*ngn*s

【讨论】:

  • 感谢您的代码。但这不是问题,也许我不够清楚。我的问题是,如何在使用 isEqualToString 时将 * 视为任何字符。例如:*ke 应该等于 Åke、Ske、Kke 等。这里 * 可以是 Å,S 或 K。
【解决方案3】:

不确定你到底在追求什么,但也许这会有所帮助。

匹配任何内容的正则表达式模式是.(点),因此您可以通过将* 替换为. 来从strReplaced 创建一个模式:

NSString *pattern = [strReplaced stringByReplacingOccurencesOfString:@"*" withString:"."];

现在使用NSRegularExpression,您可以从pattern 构造一个正则表达式,然后查看str 是否匹配它 - 请参阅documentation 了解所需的方法。

【讨论】:

  • 没有。这就是他正在寻找的东西。他正在尝试用 * 替换所有斯堪的纳维亚字母。
  • @JLILIAmen - 好吧,我不确定,OP 说他们想要匹配并且已经添加了一个编辑来加强这一点。它们似乎已经具有用 * 替换重音字母的功能。
猜你喜欢
  • 2013-09-18
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 2019-03-30
  • 2011-05-01
相关资源
最近更新 更多