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

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

Golang 中的正則表達式問題

Golang 中的正則表達式問題

Go
神不在的星期二 2022-10-24 15:24:40
我正在嘗試創建一個正則表達式來解析特定的字符串。當前字符串是abcd_1.263.0.15-8zz00df.yml,我只想從中解析1.263.0.15-8zz00df出來。已經嘗試使用此表達式"_\K.*(?=\.)",但它在 Golan 中不起作用并給我模式錯誤。有人可以幫忙嗎?
查看完整描述

4 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

Go使用RE2正則表達式引擎,它不支持前瞻、后瞻和其他 PCRE 好東西,如\K

請參閱不同正則表達式引擎的比較。

但是,您可以使用此正則表達式:

[^_-]+-[^.]+

請參閱此演示。

解釋:

[^_-]+   # a character that is not "_" or "-", one or more times

-        # a literal "-"

[^.]+    # a character that is not a dot, one or more times


查看完整回答
反對 回復 2022-10-24
?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

只需用一句話重新發布@mkopriva 的片段之一,


并非所有事情都需要使用正則表達式來完成:


    s := "abcd_1.263.0.15-8zz00df.yml"


    if i := strings.IndexByte(s, '_'); i > -1 {

        s = s[i+1:]

    }

    if i := strings.LastIndexByte(s, '.'); i > -1 {

        s = s[:i]

    }


    fmt.Println(s)


查看完整回答
反對 回復 2022-10-24
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

對于該字符串格式的更精確匹配,您可以使用捕獲組,并且由于字符串中似乎沒有空格,您可以使用\S而不是.

_(\S+)\.yml$
  • _匹配前導下劃線

  • (\S+)在第 1 組中捕獲 1+ 個非空白字符

  • \.yml匹配.yml

  • $字符串結束

查看正則表達式演示

例如

package main

import (

    "fmt"

    "regexp"

)


func main(){

    re := regexp.MustCompile(`_(\S+)\.yml$`)

    res := re.FindStringSubmatch("abcd_1.263.0.15-8zz00df.yml")

    fmt.Printf("%v", res[1])

}

輸出


1.263.0.15-8zz00df

或者更廣泛的匹配,捕獲到最后一次出現點之前:


_(\S+)\.

查看另一個正則表達式演示。



查看完整回答
反對 回復 2022-10-24
?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

編輯:您可以簡單地使用正則表達式:

_(.*)\.

貪婪匹配,這*意味著它將匹配所有內容,直到最后一個 '.' - 這正是你所需要的。您的比賽在第 1 組。


你為什么使用\K匹配器?你的正則表達式是這樣工作的:

_(.*)(?=\.)

第 1 組包含您的比賽。

注意:測試正則表達式的一個非常有用的工具是這個站點:https ://regexr.com/


查看完整回答
反對 回復 2022-10-24
  • 4 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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