2016-12-22 3 views
-2

Pythonの動作と、カラットとドルのPerl正規表現の動作は異なりますか? Pythonで

>>> import re 
>>> s = u"'ve" 
>>> re.match(u"^[\'][a-z]", s) 
<_sre.SRE_Match object at 0x1109ee030> 

だから、それは単一引用符の後に長さサブストリングが> 1

であってもマッチする:文字列 've考える

が、私はカラットで文字列の先頭をキャッチすることができます

しかし、ドルのために(文字列の末尾にマッチする):から、Perlで

>>> import re 
>>> s = u"'ve" 
>>> re.match(u"[a-z]$", s) 
>>> 

文字列の末尾を合わせることができるように思える:

$s =~ /[\p{IsAlnum}]$/ 

$s =~ /[\p{IsAlnum}]$/re.match(u"[a-z]$", s)と同じですか?

なぜカラットとドルの動作が異なるのですか? PythonとPerlでは違いますか?

+1

Pythonでは_caret_です。ダイヤモンド取引では_カラット_です。 – DyZ

+0

@DYZ、lolzニンジン。 – alvas

+1

'^ [\ '] [a-z]'は '^' [a-z]'と '[\ p {IsAlnum}] $'がよりよく書かれています。 – ThisSuitIsBlackNot

答えて

3

re.matchは、文字列の先頭に暗黙的に固定されます。 the documentation引用:

re.match(pattern, string, flags=0)

場合は、ゼロ以上の文字をstringマッチする正規表現patternの冒頭で、対応するMatchObjectインスタンスを返します。

代わりにre.searchを試してください。

>>> import re 
>>> s = u"'ve" 
>>> re.search(u"[a-z]$", s) 
<_sre.SRE_Match object at 0x7fea24df3780> 
>>> 
+0

ああありがとう@Rob !! 're.search'と' re.match'との間に厄介なものがあります。 – alvas

+0

もう一度確信してください。 Perlでの正規表現のマッチングは、常に 're.search'の動作ですか? – alvas

+1

@alvas正解。 Perlには、文字列の先頭でのみ一致する演算子がありません。そのためにアンカー( '\ A'または'^')を使用します。 – ThisSuitIsBlackNot

関連する問題