首頁 >後端開發 >Golang >為什麼 Go 和 Python 正規表示式會產生不同的結果?

為什麼 Go 和 Python 正規表示式會產生不同的結果?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-24 12:23:15370瀏覽

Why Do Go and Python Regular Expressions Produce Different Results?

不同語言中的正規表示式行為:Go 與Python

當嘗試在Go 中使用正規表示式時,開發人員可能表示會遇到意外行為。例如,考慮以下程式碼:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    a := "parameter=0xFF"
    regex := "^.+=\b0x[A-F][A-F]\b$"
    result, err := regexp.MatchString(regex, a)
    fmt.Println(result, err) // Prints: false <nil>
}

儘管在Python 中正常運作,但此程式碼無法符合預期的輸入字串:

import re

p = re.compile(r"^.+=\b0x[A-F][A-F]\b$")
m = p.match("parameter=0xFF")
if m is not None:
    print(m.group())  # Prints: parameter=0xFF

這種差異的根本原因在於Go和Python 中字串文字之間的差異。在 Go 中,預設情況下字串文字被視為“熟的”,這意味著它們被解釋為特殊字符,例如轉義序列。然而,對於正規表示式,這種行為是有問題的。

為了解決這個問題,Go 提供了原始字串文字。原始字串文字用反引號(`) 而不是引號(") 括起來。它們會忽略任何特殊字元或轉義序列,確保文字完全按照書面形式進行解釋。

因此,要解決此問題,請使用在Go在程式碼中,正規表示式應指定為原始字串文字:

var regex = `^.+=\b0x[A-F][A-F]\b$`

透過此修改,程式碼現在將正確匹配輸入字串並產生所需的結果。

以上是為什麼 Go 和 Python 正規表示式會產生不同的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn