不是'[。\ n]'代表任何角色?

时间:2012-12-09 13:05:39

标签: python regex

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!

3 个答案:

答案 0 :(得分:6)

字符类.内的

[]失去了“所有字符的特殊含义(除了换行符号或取决于标志)”并且只是一个简单的句号.

因此[.\n]仅匹配句号.或新行字符。

如果你想匹配任何一个字符(无例外),一个技巧是形成一个补充字符类的字符类,例如: [\s\S]。当语言的正则表达式不支持DOTALL选项时,这很有用,这使得.匹配任何字符。

但是,因为Python支持DOTALL选项(re.DOTALL),所以你可以使用它。

请注意,对于Python,.仅排除\n。对于其他语言,它可能会排除更多:Javascript

答案 1 :(得分: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

答案 2 :(得分:0)

来自documentation

  

特殊角色在内部失去特殊意义。对于   例如,[(+ *)]将匹配任何文字字符'(','+',   '*'或')'。

请尝试使用'.|\n',或者按照之前的说明使用re.DOTALL。