使用OR操作符的Python正则表达式



我试图用正则表达式(RE)解析大量文本文件样本。我试图从这些文件中提取文本的一部分,其中包含'vu'并以换行符'n'结束。

模式因文件而异,因此我试图使用操作符在文件中查找RE的组合。但是,我没有找到一种方法来自动化我的代码,以便 RE. findall()函数查找RE的组合。

这里是我如何试图解决这个问题的一个例子,但显然我仍然不能评估我的正则表达式和OR操作符在re.findall():

import re
def series2string(myserie) :
    myserie2 = ' or '.join(serie for serie in myserie)
    return myserie2
def expression(pattern, mystring) : 
    x = re.findall(pattern, mystring)
    if len(x)>0:
        return 1
    else:
        return 0
#text example
text = "nn    (troisième chambre)n    i - vu la requête, enregistrée le 28 février 1997 sous le n° 97nc00465, présentée pour m. z... farinez, demeurant ... à dommartin-aux-bois (vosges), par me y..., avocat ;n"
#expressions to look out
pattern1 = '^s*vu.*n'
pattern2 = '^s*(w*s*w*)s*.*?vu.*n'
pattern = [pattern1, pattern2]
pattern = series2string(pattern)
expression(pattern, text)

注意:我通过在for循环中查找每个模式来规避这个问题,但是如果我可以只使用一次re.findall(),我的代码将运行得更快。

Python正则表达式使用|操作符进行替换。

def series2string(myserie) :
    myserie2 = '|'.join(serie for serie in myserie)
    myserie2 = '(' + myserie2 + ')'
    return myserie2

更多信息:https://docs.python.org/3/library/re.html


个别图案看起来真的很乱,所以我不知道什么是错误的,什么是故意的。我猜你正在寻找"vu"这个词在一些不同的上下文中。

  1. 正则表达式始终使用Python原始字符串,前缀为r (r'pattern here')。它允许您在模式中使用,而python不会试图将其解释为字符串转义。它被直接传递给正则表达式引擎。(ref)
  2. 使用s匹配空白(空格和换行符)。
  3. 既然你已经有几个可选的模式,不要让()是可选的。它可能导致灾难性的回溯,这会使匹配大字符串变得非常慢。
    (?(
    )?)
  4. {1}不做任何事情。它只是重复前面的子模式一次,这与不指定任何内容是一样的。
  5. br无效。它被解释为b (ASCII钟字符)+字母r
  6. 在文本字符串的开头有一个引号字符(')。要么你想让^匹配任何行的开头,要么'是复制/粘贴错误。
  7. 组合模式时出现的一些错误:

    pattern = [pattern1, pattern2, pattern3, pattern4]
    pattern = series2string(pattern)
    expression(re.compile(pattern), text)
    

谢谢你的提示。我的正则表达式在我的第一篇文章中有点笨拙(我改变了它们,希望问题能更容易理解)。由于' re.compile ',我设法捕获了操作符' | ',代码工作得很好!

import re
def series2string(myserie) :
    myserie2 = '|'.join(serie for serie in myserie)
    return myserie2
def expression(pattern, mystring) : 
    x = re.findall(pattern, mystring)
    if len(x)>0:
        return 1
    else:
        return 0
#text example
text = "nn    (troisième chambre)n    i - vu la requête, enregistrée le 28 février 1997 sous le n° 97nc00465, présentée pour m. z... farinez, demeurant ... à dommartin-aux-bois (vosges), par me y..., avocat ;n"
#expressions to look out
pattern1 = r'^s*vu.*n'
pattern2 = r'^s*(w*s*w*)s*.*?vu.*n'
pattern = [pattern1, pattern2]
pattern = series2string(pattern)
expression(re.compile(pattern), text)

相关内容

  • 没有找到相关文章

最新更新