Python [0-9]和[0-9]之间的正则表达式差异。]

Python [0-9]和[0-9]之间的正则表达式差异。],python,regex,Python,Regex,我刚开始研究正则表达式,想知道以下表达式之间有什么区别: def test(): string = "He was 75 in the 1985sdfdhs 45" y = re.findall('[0-9]+', string) print(y) test() 还有这个 def test2(): string = "He was 75 in the 1985sdfdhs 45" y = re.findall('[0-9.]+', string)

我刚开始研究正则表达式,想知道以下表达式之间有什么区别:

def test():
    string = "He was 75 in the 1985sdfdhs 45"
    y = re.findall('[0-9]+', string)
    print(y)

test()
还有这个

def test2():
    string = "He was 75 in the 1985sdfdhs 45"
    y = re.findall('[0-9.]+', string)
    print(y)

test2()

据我所知,“.”匹配任何字符,因此我认为test2的输出将等于['75',1985SDFDH',45',,而它们都是['75',1985',45']。只是想弄清楚这里发生了什么。谢谢

在括号内时,点本身被视为一个字符。因此,第二个正则表达式将匹配0-9以及小数点。括号表示一个字符集,并将匹配该集中的一个字符(这就是为什么
被视为字符而不是说明符)


编辑:作为补充说明,在您学习RegEx时,我建议您将RegEx的每个部分进行细分

[]这里表示一个集合。其中的任何内容都被视为集合的一个元素。所以[0-9]表示从0到9的数字和一个“.”字符。如果您可能使用了“[0-9].+”,那么您将从测试2中得到预期的结果


您可以尝试快速检查您的正则表达式模式,然后在任何地方的代码中使用它们。

非常感谢,这就解释了为什么“[0-9]+.+”输出['75'、'1985SDFDH'、'45'],因为“.”在括号之外,所以它被视为正则表达式的一部分,而不是句点。太棒了,谢谢你的链接。