【问题标题】:Are regular expressions the same in every programming language?正则表达式在每种编程语言中都相同吗?
【发布时间】:2018-04-17 02:25:31
【问题描述】:

我是一名 Python 用户,希望学习正则表达式,并且我有一个关于 Udemy 的好课程,似乎还可以。但是它既不是 Python 课程,也不是 Python 正则表达式课程。

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

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

【问题讨论】:

  • 并非每种语言的 RegEx 模块的每个版本都是相同的,因此 PHP 的 RegEx 和 VB.NET 的 RegEx 之间存在差异,总而言之,它们都与 Python 的 RegEx 不同。跨度>
  • 注意正则表达式中的正则。这意味着它们通常在任何地方都是相同的
  • 简短的回答是“否”,尽管无论您在做什么课程,它们都可能非常相似,尤其是在基础方面(因此您的课程肯定适用)。最简单的事情就是快速浏览一下the docs 以了解 Python 中的功能。
  • @RajeshPaudel 正则表达式(例如 perl 风味与 python 风味)既不正确,也不正确为什么它们被这样命名 - 它来自正规语言和语法的形式语言理论.

标签: python regex shell scripting


【解决方案1】:

实现之间存在巨大和细微的显着差异。

根据 (2.7) regex howto,Python 的 re 模块基于 Perl 正则表达式。正则表达式语法几乎相同。 Perl 中的 用法 完全不同;更紧凑(或更不可读,取决于您的观点:-)。

另外请记住,Python 2 和 3 之间的正则表达式存在差异,具体取决于使用的标志。稍微简化一下,您可以说是开箱即用,Python 2 正则表达式处理 ASCII 字符串,而 Python 3 处理 unicode 字符串。

在 Python 正则表达式中,*+ 限定符是贪婪的,也就是说它们匹配尽可能多的文本。这会导致不直观的结果。例如,假设您要搜索尖括号之间的文本。您可能认为<.*> 可能会这样做。但请注意:

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>']

Linux 和 *BSD 等类 UNIX 系统通常在许多实用程序中支持 POSIX 正则表达式。这些有两种口味,基本的和扩展的。基本 POSIX 正则表达式不支持分支元字符 |

【讨论】:

  • 解释得很好。谢谢
【解决方案2】:

它们有不同的变化......

这个网站会给你一种方法来测试你的一些常用语言(包括python)的表达......

https://regex101.com/

【讨论】:

    猜你喜欢
    • 2012-01-25
    • 2012-05-20
    • 2010-12-30
    • 2014-06-04
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 2011-01-31
    相关资源
    最近更新 更多