我正在制作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.sub
和123
替换模式:
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))