Удалить все статьи и другие строки из строки, используя Go? - PullRequest
0 голосов
/ 26 ноября 2018

Есть ли какой-либо метод в Go или с регулярным выражением, который удаляет только те статьи, которые используются в строке?

Я попробовал приведенный ниже код, который сделает это, но он также удалит другие слова из строкиЯ показываю код ниже:

 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)

Отредактировано

Воспроизвести ссылку

В этом он удалитis, который используется в this.

Ожидаемый результат: this-string

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Моя версия только с использованием регулярного выражения

Создайте регулярное выражение в форме '\ ba \ b | \ ban \ b | \ bthe \ b | \ bis \ b |'который найдет слова в списке, которые имеют «границы слов» с обеих сторон - так что «Это» не соответствует

Второе регулярное выражение сокращает любые пробелы до тире и превращает несколько пробелов в одну черту

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)
}
0 голосов
/ 26 ноября 2018

Вы можете использовать strings.Split и strings.Join плюс цикл для фильтрации, а затем снова собрать его вместе:

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)

Выход:

this-string
Program exited.

Здесь у вас есть живой пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...