-1
content = 'abcdd'


import re,os,sys
def test():
    print content
    list = re.findall(r'[.\n]+',content)
    print list

if __name__ == '__main__':
    test()

知っている '。' '\n'以外の文字を表す

したがって、[。\n]は任意の文字を表す必要があります

しかし、結果は[]

どうして

手伝って頂けますか ?

avdanvceでありがとう!

4

3 に答える 3

6

.内部の文字クラス[]は、「すべての文字 (改行またはフラグに依存しないものを除く)」という特別な意味を失い、単なるピリオドにすぎません.

したがって、ピリオドまたは改行文字[.\n]のみに一致します。.

任意の文字 (例外なし) に一致させたい場合、1 つのトリックは、文字クラスを補完する文字クラスを形成すること[\s\S]です。これは、言語の正規表現が DOTALL オプションをサポートしていない場合に役立ちます。これにより、.任意の文字に一致します。

ただし、Python は DOTALL オプション ( re.DOTALL) をサポートしているので、それを利用できます。

Python の場合.、 のみを除外することに注意してください\n。他の言語の場合、さらに除外される可能性があります: Javascript .

于 2012-12-09T13:08:06.637 に答える
1

すべてを取得するには:

content = 'abcdd'

import re,os,sys
def test():
    print content
    list = re.findall(r'.+', content, re.DOTALL)
    print list

if __name__ == '__main__':
    test()

結果:

>>> 
abcdd
['abcdd']

DOTALL を使用する必要があります (つまり、.も意味します\n)

于 2012-12-09T13:11:06.160 に答える
0

ドキュメントから:

特殊文字は、セット内では特別な意味を失います。たとえば、[(+*)] は、リテラル文字 '('、'+'、'*'、または ')' のいずれかと一致します。

'.|\n'代わりに re.DOTALLを使用してみてください。

于 2012-12-09T13:14:54.557 に答える