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



我正在制作OCR'd txt.file的字典。在这一点上,我正在尝试制作一个"干净"的蛞蝓线,以便我 - 以后 - 可以轻松识别我想放入字典中的信息的特定部分。但这就是背景。关键是我是python的新手。

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


这是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"之间的模式的示例。所以想要匹配组<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.sub123替换模式:

r'(AANVRAGER:)W*(.*?)W*(___LOCATIE)'

请参阅正则表达式演示。

  • (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'123', line))

最新更新