当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在Python中简洁地级联多个正则表达式语句》经验,为你挑选了2个好方法。

我的困境:我正在传递一个字符串,然后我需要执行大量的正则表达式操作.逻辑是如果在第一个正则表达式中匹配,做一件事.如果不匹配,请检查与第二个匹配并执行其他操作,如果不检查第三个,依此类推.我可以这样做:

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

然而,这感觉不必要地冗长,通常在这种情况下,这意味着有一个更好的方式,我要么忽略或不知道.

有没有人建议更好的方法来做到这一点(从代码外观角度,内存使用角度或两者兼而有之)?



1> dan-gph..:

一般来说,在这些情况下,您希望使代码"数据驱动".也就是说,将重要信息放在容器中,然后遍历它.

在您的情况下,重要信息是(字符串,函数)对.

import re

def fun1():
    print('fun1')

def fun2():
    print('fun2')

def fun3():
    print('fun3')

regex_handlers = [
    (r'regex1', fun1),
    (r'regex2', fun2),
    (r'regex3', fun3)
    ]

def example(string):
    for regex, fun in regex_handlers:
        if re.match(regex, string):
            fun()  # call the function
            break

example('regex2')



2> Markus Jarde..:

类似的问题从九月回来:你如何将这个正则表达式的习惯用法从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

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有