每种编程语言中的正则表达式是否相同?

时间:2017-11-04 13:30:24

标签: python regex shell scripting

我是一个想要学习正则表达式的python用户,我在Udemy上有一个很好的课程,似乎没问题。然而,它既不是python课程也不是python正则表达式课程。

正则表达式在任何编程语言中是否相同?

我的意思是它们是否相同并使用我在python中使用re包时使用的完全相同的语法?

2 个答案:

答案 0 :(得分:4)

它们有各种变化......

这个网站将为您提供一种方法来测试您的表达式的一些常见语言(包括python)......

https://regex101.com/

答案 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正则表达式不支持分支元字符|