如何在 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))
我正在制作 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))