【问题标题】:Does Python support conditional structure in regex?Python 是否支持正则表达式中的条件结构?
【发布时间】:2014-06-09 15:12:20
【问题描述】:

Python 是否支持正则表达式中的条件结构?

  1. 如果是,为什么我不能拥有以下内容(在 if 中使用前瞻 部分)对吗?有什么方法可以让 Python 支持它?

    >>> p = re.compile(r'(?(?=regex)then|else)')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.7/re.py", line 190, in compile
        return _compile(pattern, flags)
      File "/usr/lib/python2.7/re.py", line 242, in _compile
        raise error, v # invalid expression
    sre_constants.error: bad character in group name
    
  2. 但是,使用反向引用作为 if 部分可以:

    >>> p = re.compile(r'(expr)?(?(1)then|else)')
    

http://www.regular-expressions.info/conditional.html

JGsoft 引擎、Perl、PCRE、Python 支持条件语句, 和 .NET 框架。

在正则表达式中使用条件的最接近的解决方案是什么?

我的 Python 是 2.7.3。我不知道如何检查re 模块的版本(我该怎么做?)。谢谢。

【问题讨论】:

  • 可能不行,它在最新的python 3.4中不起作用

标签: python regex


【解决方案1】:

根据您引用的文档:

Python 支持使用编号或命名的捕获组的条件。 Python 不支持使用环视的条件,即使 Python 确实支持条件外的环视。 除了(?(?=regex)then|else) 之类的条件,您可以交替使用两个相反的环视:(?=regex)then|(?!regex)else)

【讨论】:

  • 谢谢。有哪些流行的语言支持在 if 部分使用环视?
  • @Tim,对此我没有绝对的答案。至少,我知道 perl 支持它:perldoc.perl.org/…
  • 谢谢,我正在寻找一个在线测试器,可以使用环视作为 if 部分来测试条件。我尝试了一些,但还没有找到一个工作。
猜你喜欢
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多