我是一个想要学习正则表达式的python用户,我在Udemy上有一个很好的课程,似乎没问题。然而,它既不是python课程也不是python正则表达式课程。
正则表达式在任何编程语言中是否相同?
我的意思是它们是否相同并使用我在python中使用re
包时使用的完全相同的语法?
答案 0 :(得分:4)
答案 1 :(得分:1)
实现之间存在显着差异。
根据(2.7)正则表达式,Python的re
模块基于Perl正则表达式。正则表达式语法几乎相同。 Perl中的用法是完全不同的;更紧凑(或更难以阅读,取决于您的观点: - )。
另请注意,Python 2和3之间的正则表达式存在差异,具体取决于使用的是哪些标志。稍微简化你可以说开箱即用,Python 2正则表达式处理ASCII字符串,而Python 3处理unicode字符串。
在Python正则表达式中,*
和+
限定符是 greedy ,即它们匹配尽可能多的文本。这使得结果不直观。例如,假设您要在尖括号之间搜索文本。您可能认为<.*>
可能会这样做。但请注意:
In [1]: import re
In [2]: re.findall('<.*>', '<a> <b> <c>')
Out[2]: ['<a> <b> <c>']
您必须添加?
才能使它们变得非贪婪。
In [3]: re.findall('<.*?>', '<a> <b> <c>')
Out[3]: ['<a>', '<b>', '<c>']
明确地说,你必须寻找除了结束角色之外的任何东西。
In [4]: re.findall('<[^>]*>', '<a> <b> <c>')
Out[4]: ['<a>', '<b>', '<c>']
类似UNIX的系统(如Linux和* BSD)通常在许多实用程序中支持POSIX正则表达式。那些有两种口味,基本和扩展。基本POSIX正则表达式不支持分支元字符|
。