【问题标题】:Search string, but allow different but similar punctuation characters搜索字符串,但允许不同但相似的标点符号
【发布时间】:2015-05-28 20:12:26
【问题描述】:

我想在字符串中搜索子字符串,但允许使用不同但相似的标点符号(包括空格)。

例如,如果我有字符串

@"this is a 'difficult' string to search"

然后我搜索子字符串

@"a ‘difficult‘ string"

目前找不到,因为子字符串使用了不同类型的单引号。

有没有一种搜索方式可以允许这样的细微变化?还是我必须自己写?如果我必须按照自己的方式编写,我该怎么做?

显然还有很多其他的可能性我想介绍,有很多类型:

双引号(例如 U+0022、U+201C、U+201D)

单引号(U+0027、U+2018、U+2019)

破折号(U+002D、U+2010、U+2011、U+2012、U+2013、U+2014、U+2015(等))

空格(U+0020、U+00A0(等))

那么我该怎么做呢

[myString rangeOfString:subString options:allowForSimilarPunctuation]

到目前为止,我一直在通过替换字符组合和重复搜索来更改字符串和子字符串,但这似乎是一种笨拙的方式,必须有一个聪明的方法吗?

【问题讨论】:

  • 我会删除所有非字母数字字符和非空格的两个字符串。然后进行比较。
  • 是的,我打算在问题中说明我已经尝试过,但是当标点符号不是很相似时,这种方法也会给出肯定的匹配。我希望它比这更准确。我想我可以用“普通”空格替换所有空格,用一种类型的双引号等替换所有双引号。这会起作用,但看起来有点笨拙,我想知道如何“正确”做

标签: ios objective-c regex nsstring string-comparison


【解决方案1】:

你可以使用字符类:

@"a [‘']difficult[‘'] string"

如果您想试一试,这里有一个关于 Regex101 的示例: https://regex101.com/r/iZ6lQ8/1

【讨论】:

  • 有趣,我不知道这是一种可能性。它仍然意味着创建一个新版本的子字符串,它仍然感觉有点笨拙,但它似乎比我目前正在做的更好(假设它有效:))。我可以在 NSString 上创建一个类别。如果我在接下来的几分钟内没有任何其他选择,我会试一试。
  • 酷。如果你想亲自动手,我提供了一个表达式的在线测试工具的链接。
  • 谢谢,我已经给你投票了,但我会把我的答案和代码作为接受的答案,所以其他人也可以使用它:)
  • 实际上我删除了我的答案,因为我最终需要添加太多的临时代码,这似乎不再是一个优雅的答案。
猜你喜欢
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 2015-10-04
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 2021-07-15
相关资源
最近更新 更多