在Swift中,如何删除字符串中的哈希标记?
例如,string=在Swift中,如何删除字符串中的哈希标记?,swift,Swift,例如,string=我是一个#hashtag1 string#hashtag2 Hi 在Swift 2中,删除hashtags使字符串变为I am string Hi的理想方法是什么 哈希标记不是固定字符串。它可以是任何以#开头的字符串。此问题不应标记为重复。带有正则表达式的解决方案 let string = "I am a #hashtag1 string #hashtag2 Hi!" let withoutHashTags = string.stringByReplacingOccurren
我是一个#hashtag1 string#hashtag2 Hi代码>
在Swift 2中,删除hashtags使字符串变为I am string Hi的理想方法是什么代码>
哈希标记不是固定字符串。它可以是任何以#
开头的字符串。此问题不应标记为重复。带有正则表达式的解决方案
let string = "I am a #hashtag1 string #hashtag2 Hi!"
let withoutHashTags = string.stringByReplacingOccurrencesOfString("#(?:\\S+)\\s?",
withString: "",
options: .RegularExpressionSearch,
range: Range(string.startIndex..<string.endIndex))
let string=“我是一个#hashtag1 string#hashtag2 Hi!”
let withoutHashTags=string.StringByReplacingOfString(“#(?:\\S+\\S?”)的出现,
带字符串:“”,
选项:。常规表达式搜索,
range:range(string.startIndex..带正则表达式的解决方案
let string = "I am a #hashtag1 string #hashtag2 Hi!"
let withoutHashTags = string.stringByReplacingOccurrencesOfString("#(?:\\S+)\\s?",
withString: "",
options: .RegularExpressionSearch,
range: Range(string.startIndex..<string.endIndex))
let string=“我是一个#hashtag1 string#hashtag2 Hi!”
let withoutHashTags=string.StringByReplacingOfString(“#(?:\\S+\\S?”)的出现,
带字符串:“”,
选项:。常规表达式搜索,
范围:范围(string.startIndex..或使用reduce
,但失去可读性:
let testString = "I am a #hashtag1 string .#hashtag2 Hi!"
let reducedValue = testString.characters.reduce(("", true)) {
if $0.1 && $1 != "#" {
return ("\($0.0)\($1)", true)
} else if $0.1 && $1 == "#" {
return ("\($0.0)", false)
} else if let last = $0.0.characters.last where !$0.1 && $1 == " " && last == " " {
return ("\($0.0)", true)
} else if !$0.1 && $1 == " " {
return ("\($0.0)\($1)", true)
} else {
return ("\($0.0)", false)
}
let result = reducedValue.0
或者使用减少,但失去可读性:
let testString = "I am a #hashtag1 string .#hashtag2 Hi!"
let reducedValue = testString.characters.reduce(("", true)) {
if $0.1 && $1 != "#" {
return ("\($0.0)\($1)", true)
} else if $0.1 && $1 == "#" {
return ("\($0.0)", false)
} else if let last = $0.0.characters.last where !$0.1 && $1 == " " && last == " " {
return ("\($0.0)", true)
} else if !$0.1 && $1 == " " {
return ("\($0.0)\($1)", true)
} else {
return ("\($0.0)", false)
}
let result = reducedValue.0
Oneliner:
let text = "I am a #hashtag1 string #hashtag2 Hi!"
let test = text.componentsSeparatedByString(" ").filter { !$0.containsString("#hashtag") }.joinWithSeparator(" ")
print(test) // I am a string Hi!
编辑:
返回到oneliner:p,但对我的口味来说仍然有点太复杂。oneliner:
let text = "I am a #hashtag1 string #hashtag2 Hi!"
let test = text.componentsSeparatedByString(" ").filter { !$0.containsString("#hashtag") }.joinWithSeparator(" ")
print(test) // I am a string Hi!
编辑:
返回一行代码:p,对我来说仍然有点太复杂。您可以使用以下语句:
让aString=“我是一个#hashtag1字符串。#hashtag2嗨!”
让newString=aString.replacingOccurrences(of:“#hashtag”,with:”)您可以使用以下语句:
让aString=“我是一个#hashtag1字符串。#hashtag2嗨!”
让newString=aString.replacingOccurrences(of:“#hashtag”,with:”)获取字符串数组(使用ComponentSeparatedByString)用空格分隔,然后检查以#开头的每个字符串,如果是,则删除它们,然后再次重建字符串sentence@azimov谢谢。这是我想到的一种方法,但我希望学习更多的方法(如果有的话)。获取字符串数组(使用ComponentSeparatedByString)用空格分隔,然后检查以#开头的每个字符串,如果是,则删除它们,然后再次重建字符串sentence@azimov谢谢。这是我想到的一种方法,但我希望能学到更多的方法(如果有的话)。非常简洁。作为String
,mutating func removeHashTags(){…}的变异扩展,可能很有用
只需添加上面的string
替换为self
。这里唯一可能的缺点是,如果hashtag与前面的单词没有很好地分开,那么我们将把前面的单词粘到hashtag单词后面的单词上,例如“我被粘到了hashtag1 ThisNow上了#hashtag2 Hi!”
产生“我被粘住了!嗨!”
。你可以用这个正则表达式\\s?#(?:\\s+)\\s?
来做这件事,并替换为一个空格字符而不是空字符串@dfrith将修复“粘住”效果,但如果说第一个或最后一个单词是一个哈希标记词,仍然会留下额外的空格。例如,“#哈希标记1 2#哈希标记2三#哈希标记3#哈希标记3”“
产生“一二三四”
。我知道,对于所有情况都没有简单的解决方案。@dfriI更新了答案。去除前导或尾随空格的最简单方法是修剪字符串。非常整洁紧凑。作为字符串的变异扩展,mutating func removeHashTags(){…}可能很有用
只需添加上面的string
替换为self
。这里唯一可能的缺点是,如果hashtag与前面的单词没有很好地分开,那么我们将把前面的单词粘到hashtag单词后面的单词上,例如“我被粘到了hashtag1 ThisNow上了#hashtag2 Hi!”
产生“我被粘住了!嗨!”
。你可以用这个正则表达式\\s?#(?:\\s+)\\s?
来做这件事,并替换为一个空格字符而不是空字符串@dfrith将修复“粘住”效果,但如果说第一个或最后一个单词是一个哈希标记词,仍然会留下额外的空格。例如,“#哈希标记1 2#哈希标记2三#哈希标记3#哈希标记3”“
产生“一二三四”
。我知道,对于所有情况都没有简单的解决方案。@dfriI更新了答案。去除前导空格或尾随空格的最简单方法是修剪字符串。此解决方案也适用于OP:s问题中的示例,但请注意,它有与vadian:s答案中所述相同的缺点:如果标签字没有很好地分开从前面的单词开始,前面的单词将被粘贴到标签后面的单词中。@dfri是的,我更新了我的答案,稍作修改,以消除“粘合效应”。这解决了这个问题,但现在是“正常”has标记将被替换,留下两个空格。此外,如果hashtag是字符串中的最后一个字,则解决方案仍会留下一个尾随空格(如果hashtag是第一个字,则会留下一个额外的空格)。例如,let testString=“#hashtag1一两#hashtag2三#hashtag3四#hashtag3”
产生|一二三四
(对于打印(“|”+结果+“|”):请注意额外的首字母和尾随空格,最后是
3`和4
之间的额外空格。此解决方案也适用于OP:s问题中的示例,但请注意,它具有与vadian:s答案中所述相同的缺点:如果标签字与其前面的字没有很好地分开,则前面的word将粘在标签后面的单词中。@dfri是的,为了消除“粘合效应”,我对答案进行了轻微的修改。这解决了这个问题,但现在“正常”has标签将被替换,留下两个空格。此外,如果标签是字符串中的最后一个单词,解决方案仍然会留下一个尾随空格(如果是ha,还需要额外的空间)