ホームページ >バックエンド開発 >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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。