使用Go从字符串中删除所有文章和其他字符串?

Is there any method in Go or having regular expression that it will remove only the articles used in the string?

I have tried below code that will do it but it will also remove other words from the string I'm showing the code below:

 removalString := "This is a string"
 stringToRemove := []string{"a", "an", "the", "is"}
 for _, wordToRemove := range stringToRemove {
     removalString = strings.Replace(removalString, wordToRemove, "", -1)
 }
 space := regexp.MustCompile(`\s+`)
 trimedExtraSpaces := space.ReplaceAllString(removalString, " ")
 spacesCovertedtoDashes := strings.Replace(trimedExtraSpaces, " ", "-", -1)
 slug := strings.ToLower(spacesCovertedtoDashes)
 fmt.Println(slug)

Edited

Play link

In this It will remove the is which is used in the this.

The Expected output is this-string

You can use strings.Split and strings.Join plus a loop for filtering and then building it together again:

removalString := "This is a string"
stringToRemove := []string{"a", "an", "the", "is"}
filteredStrings := make([]string, 0)
for _, w := range strings.Split(removalString, " ") {
    shouldAppend := true
    lowered := strings.ToLower(w)
    for _, w2 := range stringToRemove {
        if lowered == w2 {
            shouldAppend = false
            break
        }
    }
    if shouldAppend {
        filteredStrings = append(filteredStrings, lowered)
    }
}
resultString := strings.Join(filteredStrings, "-")
fmt.Printf(resultString)

Outpus:

this-string
Program exited.

Here you have the live example

My version just using regexp

Construct a regexp of the form '\ba\b|\ban\b|\bthe\b|\bis\b|' which will find the words in the list that have "word boundaries" on both sides - so "This" is not matched

Second regexp reduces any spaces to dashes and makes multiple spaces a single dash

package main

import (
    "bytes"
    "fmt"
    "regexp"
)

func main() {
    removalString := "This is a strange string"
    stringToRemove := []string{"a", "an", "the", "is"}

    var reg bytes.Buffer
    for _, x := range stringToRemove {
        reg.WriteString(`\b`) // word boundary
        reg.WriteString(x)
        reg.WriteString(`\b`)
        reg.WriteString(`|`) // alternation operator
    }
    regx := regexp.MustCompile(reg.String())
    slug := regx.ReplaceAllString(removalString, "")
    regx2 := regexp.MustCompile(` +`)
    slug = regx2.ReplaceAllString(slug, "-")

    fmt.Println(slug)
}