当前位置: 首页 > 面试题库 >

如何在Python中简洁地级联多个正则表达式语句

滕弘新
2023-03-14
问题内容

我的两难选择:我正在向函数传递一个字符串,然后在该字符串上执行许多正则表达式操作。逻辑是,如果第一个正则表达式中存在匹配项,则做一件事。如果不匹配,请检查第二个是否匹配,然后执行其他操作;如果不匹配,请执行其他操作,依此类推。我可以做这样的事情:

if re.match('regex1', string):
    match = re.match('regex1', string)
    # Manipulate match.group(n) and return
elif re.match('regex2', string):
    match = re.match('regex2', string)
    # Do second manipulation
[etc.]

但是,这感觉不必要的冗长,通常情况下,这意味着我有更好的方法可以忽略或不知道。

是否有人建议采用更好的方法(从代码外观的角度,内存使用的角度或两者兼而有之)?


问题答案:

9月中的类似问题:您如何将这种正则表达式习语从Perl转换为Python?

在模块中使用全局变量可能不是最好的方法,但可以将其转换为类:

import re

class Re(object):
  def __init__(self):
    self.last_match = None
  def match(self,pattern,text):
    self.last_match = re.match(pattern,text)
    return self.last_match
  def search(self,pattern,text):
    self.last_match = re.search(pattern,text)
    return self.last_match

gre = Re()
if gre.match(r'foo',text):
  # do something with gre.last_match
elif gre.match(r'bar',text):
  # do something with gre.last_match
else:
  # do something else


 类似资料:
  • 如何简化这个正则呢? 或者是否有其他实现方式(正则)?

  • 问题内容: 有没有办法在Python中调试正则表达式?而且我不是指尝试和尝试直到他们起作用的过程:) 这是在Perl中调试正则表达式的方式: 上面的代码在运行时在我的计算机上产生以下输出: 问题答案: p = re.compile(‘.*’, re.DEBUG) max_repeat 0 65535 any None >>>

  • 正则表达式是一系列的字符串。这些包含超过其字面含义的字符串被称之为元字符。例如,一个符号前面的引用符代表一个人的言语能力,或者按照上面的说法,代表着meta-meaning[1]。正则表达式是一组字符串和(或者)一组匹配(特定的)模式的元字符。 一个正则表达式包含下面的一个或多个选项: 一组字符串。这是仅仅表示字面意思的字符串。最简单形式的正则表达式仅仅包含一组字符串。 一个锚字符。锚节点指定了正

  • 问题内容: 我有一个Python正则表达式,其中包含一个可以出现零次或多次的组-但是当我之后检索组列表时,仅出现最后一个。例: () 这将返回列表(“ g”,) 我需要它返回(’a’,’b’,’c’,’d’,’e’,’f’,’g’,) 那可能吗?我该怎么做? 问题答案: 除了道格拉斯·里德(Douglas Leeder)的解决方案之外 ,以下是解释: 在正则表达式中,组数是固定的。在组后面放置一个

  • 主要内容:实例,为什么使用正则表达式?,发展历史,应用领域除非您以前使用过正则表达式,否则您可能不熟悉一些术语。但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念。 例如,您很可能使用 ? 和 * 通配符来查找硬盘上的文件。? 通配符匹配文件名中的 0 个或 1 个字符,而 * 通配符匹配零个或多个字符。像 data(\w)?\.dat 这样的模式将查找下列文件: 使用 * 字符代替 ? 字符扩大了找到的文件的数量。data.*\.dat 匹配下

  • 问题内容: 我需要一些帮助来声明正则表达式。我的输入如下: 所需的输出是: 我已经试过了: 我也尝试过此方法(但似乎我使用了错误的regex语法): 我不想replace从1到99 进行硬编码。。。 问题答案: 这个经过测试的代码段应该做到这一点: 编辑:这是一个注释的版本,说明其工作方式: 正则表达式很有趣!但我强烈建议你花一两个小时来学习基础知识。对于初学者,你需要了解哪些特殊字符:需要转义的