Ios 从字符串中删除单词数组

Ios 从字符串中删除单词数组,ios,arrays,swift,string,Ios,Arrays,Swift,String,我有一些数据,其中包括我不想显示的某些单词。在将字符串显示到标签之前,我试图从字符串中删除这些单词集。有了我的代码,我可以一个字一个字地完成这个任务,但是必须输入X次代码才能完成每个字。立即删除这组单词的正确方法是什么 以下是我当前使用的代码: let remove = ["Production", "Productions", "Studio", "Studios", "Entertainment", "Pictures", "Company", "Films", "Media"]

我有一些数据,其中包括我不想显示的某些单词。在将字符串显示到标签之前,我试图从字符串中删除这些单词集。有了我的代码,我可以一个字一个字地完成这个任务,但是必须输入X次代码才能完成每个字。立即删除这组单词的正确方法是什么

以下是我当前使用的代码:

 let remove = ["Production", "Productions", "Studio", "Studios", 
"Entertainment", "Pictures", "Company", "Films", "Media"]
                if let range = string.range(of: remove) {
                    string.removeSubrange(range)
                }
                self.label.text = string
使用此代码,我在
范围
行收到此错误:

参数类型“[String]”与预期的类型“StringProtocol”不一致

你可以试试

remove.forEach {
   if let range = string.range(of:$0) {
     string.removeSubrange(range)
  }
}
由于
范围(of:)
需要字符串而不是数组

您可以尝试

remove.forEach {
   if let range = string.range(of:$0) {
     string.removeSubrange(range)
  }
}
由于
range(of:)
需要字符串而不是数组,因此错误很明显

range(of
的参数是
字符串
而不是数组(
[String]

你需要一个循环

let wordsToRemove = ["Production", "Productions", "Studio", "Studios", "Entertainment", "Pictures", "Company", "Films", "Media"]
for word in wordsToRemove {
   if let range = string.range(of: word) {
      string.removeSubrange(range)
   }
}
self.label.text = string
另一种方法是正则表达式

let trimmedString = string.replacingOccurrences(of: "(Productions?|Studios?|Entertainment|Pictures|Company|Films|Media)",
                                             with: "",
                                          options: .regularExpression)
self.label.text = trimmedString
错误很明显

range(of
的参数是
字符串
而不是数组(
[String]

你需要一个循环

let wordsToRemove = ["Production", "Productions", "Studio", "Studios", "Entertainment", "Pictures", "Company", "Films", "Media"]
for word in wordsToRemove {
   if let range = string.range(of: word) {
      string.removeSubrange(range)
   }
}
self.label.text = string
另一种方法是正则表达式

let trimmedString = string.replacingOccurrences(of: "(Productions?|Studios?|Entertainment|Pictures|Company|Films|Media)",
                                             with: "",
                                          options: .regularExpression)
self.label.text = trimmedString

您可以指定允许的单词,然后使用
Filter
删除不需要的单词:

var strings = ["Hello","Playground","World","Earth"]

var allowedStrings = "Playground Earth" // Specify using space
let seperated:[String] = allowedStrings.components(separatedBy: " ")

for i in seperated {
    if strings.contains(i) {
        strings = strings.filter{$0 != i}
    }
}
print(strings)   // ["Playground", "Earth"]

您可以指定允许的单词,然后使用
Filter
删除不需要的单词:

var strings = ["Hello","Playground","World","Earth"]

var allowedStrings = "Playground Earth" // Specify using space
let seperated:[String] = allowedStrings.components(separatedBy: " ")

for i in seperated {
    if strings.contains(i) {
        strings = strings.filter{$0 != i}
    }
}
print(strings)   // ["Playground", "Earth"]

我更喜欢ALT表达式。谢谢!虽然替换的单词留空了,即使没有一个空间用于<代码>:“”。这有一个解决办法吗?代码应该工作。它不考虑单词之前或之后的空间(以及<代码> ReaveSubRange<代码>解决方案)。如果你想删除一个超前的空间,也可以把这个模式改为<代码>”(产品…………/代码)。我更喜欢alt表达式。谢谢!虽然替换的单词空空如也,即使没有一个空间用于<代码>:“”。这个代码应该工作。它不考虑单词之前或之后的空间。(以及
removeSubrange
解决方案)。如果要同时删除前导空格,请将模式更改为
“\\s(Productions?|…