さまざまな言語での正規表現の動作: 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 サイトの他の関連記事を参照してください。