如何在 python 2.7 中使用 for 循环去除匹配模式?

How can I strip a matching pattern by using a for-loop in python 2.7?

我正在制作 OCR 字典 txt.file。在这一点上,我正在尝试制作一个 'clean' slugline,以便我 - 稍后 - 可以轻松识别我想放入字典的特定信息部分。但这是上下文。重点是我是 python.

的新手

我在删除 slugline 中的所有空格和 komma 时遇到问题,因为我不知道如何使用 lookbehinds 来识别正确的匹配模式,并去除这个特定的模式。


这是 txt.file 的节选,内容如下:

[AANVRAAGNUMMER:__542-13___AANVRAGER:  Dr.B.Leijnse en Dr.H.M. van Praag, ___LOCATIE:_Rotterdam___ONDERZOEKSONDERWERP:   bestudering van het werkingsmechanisme van de anti-depressieve hydrazinen, in bio chemisch en psychiatrisch-psychologisch opzicht  __BEDRAG:__ f 16.000]
[AANVRAAGNUMMER:__547-7___AANVRAGER:  Dr.H.K.A. Visser, ___LOCATIE:_Groningen___ONDERZOEKSONDERWERP:   onderzoek over de werking van het antidiuretische hormoon en de regulatie van de centrale afgifte van dit hormoon gedurende de kinderleeftijd (1962)  __BEDRAG:__ f 9.600]
[AANVRAAGNUMMER:__548-4___AANVRAGER:  Dr.F.Schwarz, ___LOCATIE:_Utrecht___ONDERZOEKSONDERWERP:   onderzoek naar de invloed van Exophthalmos Producing Substance op bindweefsel  __BEDRAG:__ f 13.000] 
[AANVRAAGNUMMER:__562-8___AANVRAGER:  Prof. Dr.J.Droogleever Fortuyn, ___LOCATIE:_Groningen___ONDERZOEKSONDERWERP:   onderzoek naar bouw en functie van de middenhersenen (1960-1962___AANVRAGER: ) __BEDRAG:__ f 13.100] 

最后我希望它看起来像这样(以第一行为例):

[AANVRAAGNUMMER:__542-13___AANVRAGER:Dr.B.Leijnse en Dr.H.M. van Praag___LOCATIE:_Rotterdam___ONDERZOEKSONDERWERP:bestudering van het werkingsmechanisme van de anti-depressieve hydrazinen, in bio chemisch en psychiatrisch-psychologisch opzicht__BEDRAG:__f 16.000] 

以下代码是我如何尝试去除 "AANVRAGER:" 和“___LOCATIE”之间的模式的示例。所以想匹配 group<1>,但我不知道如何将其应用于 for 循环。我想我可以扩展编译正则表达式,这样我就可以完成预期的结果。

#Import regular Expression Library
import re

#Import data
IN = open('OrderedPhase1.txt', 'r')
OUT = open ('StrippedCategories.txt', 'w')
LinesRAW = IN.readlines()

#create regular expression of which group<1> identifies the targeted text
aanvrager = re.compile(r"""(?<=AANVRAGER:)
                       ([\D]+)
                       (?=___LOCATIE)
                       """, re.VERBOSE)

#loop for identififying the matching pattern and strip delete comma's and spaces using the strip-method
for line in LinesRAW:
    if aanvrager.match(line):
        stripped = line.strip(',').strip()

        #write new lines to file
        OUT.write(stripped)

您可以将以下正则表达式与 re.sub</code> 替换模式一起使用:</p> <pre><code>r'(AANVRAGER:)\W*(.*?)\W*(___LOCATIE)'

参见regex demo

详情

  • (AANVRAGER:) - 第 1 组:文字字符串
  • \W* - 0 个或多个非单词字符
  • (.*?) - 第 2 组:除换行字符外的任何 0 个或更多字符,尽可能少
  • \W* - 0 个或多个非单词字符
  • (___LOCATIE) - 第 3 组:文字字符串。

在您的代码中,

aanvrager = re.compile(r'(AANVRAGER:)\W*(.*?)\W*(___LOCATIE)')
for line in LinesRAW:
    OUT.write(aanvrager.sub(r'', line))