亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang 正則表達式匹配字符串直到給定的字符序列

Golang 正則表達式匹配字符串直到給定的字符序列

Go
ibeautiful 2023-06-01 14:15:15
我有一個字符串,可以有一個 -name 后跟值(可以有空格),也可以有 -descr 后跟一個值(-descr 后跟值可能不存在):示例字符串:runcmd -name abcd xyz -descr abc def或者runcmd -name abcd xyz使用 Go 語言,我該如何編寫正則表達式,它會返回 -descr 之前的字符串(如果它存在)。所以,對于上面的兩個例子,結果應該是:runcmd -name abcd xyz我在嘗試:regexp.MustCompile(`(-name ).+?=-descr`)但是,那沒有返回任何匹配項。我想知道正確的正則表達式來獲取字符串直到 -descr 如果它存在
查看完整描述

3 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

您可以在一個組中捕獲第一部分-name,然后匹配中間的部分并使用可選的第二個捕獲組來匹配-descr和后面的內容。

然后您可以在創建所需結果時使用捕獲組。

^(.*? -name\b).*?(-descr\b.*)?$

正則表達式演示去演示

例如:

s := "runcmd -name abcd xyz -descr abc def"
re1 := regexp.MustCompile(`^(.*? -name\b).*?(-descr\b.*)?$`)
result := re1.FindStringSubmatch(s)
fmt.Printf(result[1] + "..." + result[2])

結果:

runcmd -name...-descr abc def


查看完整回答
反對 回復 2023-06-01
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

“不起作用”是指它不匹配任何東西,還是不符合您的期望?

https://regex101.com/通常在測試正則表達式時非常有用。

我不相信有一種簡單的方法可以實現你想要的。如果我們可以假設文本之間不包含任何內容,那么事情就會變得簡單得多,-name-descr這種-情況下,regex.MustCompile(`-name ([^-]*)`)應該可以工作

對于這種事情,通常使用 2 個正則表達式會更簡單明了。所以第一個條帶-descr和它后面的任何內容,以及第一個匹配項-name和所有后續字符。


查看完整回答
反對 回復 2023-06-01
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

您在這里不是在處理常規語言,因此沒有理由淘汰(慢速)正則表達式引擎。strings 包就足夠了:


package main


import (

    "fmt"

    "strings"

    "unicode"

)


func main() {

    fmt.Printf("%q\n", f("runcmd -name abcd xyz -descr abc def"))

    fmt.Printf("%q\n", f("runcmd -name abcd xyz"))

    fmt.Printf("%q\n", f("-descr abc def"))

}


func f(s string) string {

    if n := strings.Index(s, "-descr"); n >= 0 {

        return strings.TrimRightFunc(s[:n], unicode.IsSpace)

    }

    return s

}


// Output:

// "runcmd -name abcd xyz"

// "runcmd -name abcd xyz"

// ""

在操場上試試:https ://play.golang.org/p/RFC65CYe6mp


查看完整回答
反對 回復 2023-06-01
  • 3 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號