15

Python 2.6 で。文字列の末尾のマーカーであり、グループ式$\Z互換性がないようです。例

import re
re.findall("\w+[\s$]", "green pears")

戻り値

['green ']

$効果的には機能しません)。そして使用して

re.findall("\w+[\s\Z]", "green pears")

エラーが発生します。

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc in findall(pattern, string, flags)
    175 
    176     Empty matches are included in the result."""
--> 177     return _compile(pattern, flags).findall(string)
    178 
    179 if sys.hexversion >= 0x02020000:

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc in _compile(*key)
    243         p = sre_compile.compile(pattern, flags)
    244     except error, v:
--> 245         raise error, v # invalid expression
    246     if len(_cache) >= _MAXCACHE:
    247         _cache.clear()

error: internal: unsupported set operator

なぜそのように機能し、どのように回避するのですか?

4

3 に答える 3

35

[..]式は文字グループです。つまり、式に含まれる任意の1つの文字と一致します。したがって、リテラル$文字と一致しています。文字グループは常に1つの入力文字に適用されるため、アンカーを含めることはできません。

空白文字または文字列の終わりのいずれかに一致させる場合は、代わりに、|またはセレクターと組み合わせて、キャプチャーしないグループを使用します。

r"\w+(?:\s|$)"

\bまたは、境界アンカーという単語を見てください。グループの開始点または終了点のどこにでも一致します(したがって、文字の前後にある文字、または文字列の開始\w点または終了点にあるテキスト内のポイントに固定されます)。\w\W

于 2012-10-06T20:27:52.423 に答える
3

角かっこはグループを示すものではなく、1の文字(角かっこ内の文字のいずれか)に一致する文字セットを示します。文書化されているように、「特殊文字はセット内で特別な意味を失います」(\s)。

文字列と一致\sまたは終了する場合は、のようなものを使用します\s|$

于 2012-10-06T20:30:15.237 に答える