-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]只匹配句号.或换行符。

如果你想匹配任何字符(无例外),一个技巧是形成一个互补字符类的字符类,例如[\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 回答