我正在尝试使用正则表达式(RE)解析大量文本文件。我试图从这些文件中提取包含'vu'并以换行符'\ n'结尾的文本部分。
模式因一个文件而异,因此我尝试使用OR运算符在文件中查找RE的组合。但是,我没有找到一种使代码自动化的方法,因此re.findall()函数查找RE的组合。
这是我如何解决此问题的示例,但是显然我仍然无法在re.findall()中同时评估我的正则表达式和OR运算符:
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 = "\n\n (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”一词。
r
(r'pattern here'
)为前缀。它允许您\
在模式中使用Python,而无需尝试将其解释为字符串转义。它直接传递到正则表达式引擎。(参考)\s
匹配空白(空格和换行符)。(
和)
可选。这可能会导致灾难性的回溯,这会使匹配大字符串的速度变慢。\(?
→交通\(
\)?
→交通\)
{1}
什么也没做 它仅重复一次上一个子模式,这与不指定任何内容相同。\br
是无效的。它被解释为\b
(ASCII钟形字符)+字母r
。'
文本字符串的开头有一个引号()。您打算^
匹配任何行的开头,或者'
是复制/粘贴错误。组合模式时的一些错误:
pattern = [pattern1, pattern2, pattern3, pattern4]
pattern = series2string(pattern)
expression(re.compile(pattern), text)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句