【问题标题】:Remove all articles and other strings from a string using Go?使用 Go 从字符串中删除所有文章和其他字符串?
【发布时间】:2023-04-07 19:59:01
【问题描述】:

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)

已编辑

Play link

在此它将删除is 中使用的this

预期的输出是this-string

【问题讨论】:

  • 如果您的请求是针对现有实现的,那是题外话,因为此处不允许资源请求。如果您的问题是如何改进或修复您当前的代码,您需要更具体:您面临什么问题?您需要什么帮助?
  • 显示输入和预期输出的示例以及失败的原因。
  • 还要注意“is”不是冠词,而是动词。

标签: regex string go


【解决方案1】:

您可以使用strings.Splitstrings.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.

这里有live example

【讨论】:

    【解决方案2】:

    我的版本只是使用正则表达式

    构造一个形式为 '\ba\b|\ban\b|\bthe\b|\bis\b|' 的正则表达式这会发现 列表中两边都有“单词边界”的单词 - 所以“This”不匹配

    第二个正则表达式将任何空格减少为破折号,并使多个空格成为单个破折号

    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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2012-08-31
      • 2017-06-06
      相关资源
      最近更新 更多