How to insert a newline in list using regex in python 2.7?

荒凉一梦 提交于 2019-12-19 11:33:11

问题


I am trying to make an ordered dataset out of an OCR scan. I have preprocessed the result by making a list which contains all 'units' - separated by newlines. This looks like this:

[' 525-11 Prof.Dr.F.J.A.Kreuzer, Nijmegen  onderzoek met betrekking tot de fysiologie van ademhaling en bloedsomloop op grote hoogte  17.500\n', 
' 527-7 Dr.G.Buyze, Utrecht  onderzoek naar het kopermetabolisme bij geesteszicken  s 9.400\n', 
' 527-8  Prof. Dr. Elisabeth P.Steyn Parv\xc3\xa9, Utrecht onderzoek naar de betekenis van thiaminc voor de synthese van vetzuren in het dierlijk lichaam  s 5.400\n', 
' 532-7 Dr.J.K. Sch\xc3\xb6nfeld, Rotterdam  onderzoek over de rol van de L-fase van bacteri\xc3\xabn bij chronische en recidiverende ziekten (1962)  f 3.100\n', 
' 532-8  A.G.Schuitemaker, Heiloo  onderzoek naar het lytisch vermogen van bacteriofagen voor mycobacteri\xc3\xabn f 2.000\n', 
' 542-13 Dr.B.Leijnse en Dr.H.M. van Praag, Rotterdam  bestudering van het werkingsmechanisme van de anti-depressieve hydrazinen, in bio chemisch en psychiatrisch-psychologisch opzicht  f 16.000\n', 
' 547-7 Dr.H.K.A. Visser, Groningen  onderzoek over de werking van het antidiuretische hormoon en de regulatie van de centrale afgifte van dit hormoon gedurende de kinderleeftijd (1962)  s 9.600\n', 
' 548-4 Dr.F.Schwarz, Utrecht  onderzoek naar de invloed van Exophthalmos Producing Substance op bindweefsel  s 13.000\n', 
' 562-8 Prof. Dr.J.Droogleever Fortuyn, Groningen  onderzoek naar bouw en functie van de middenhersenen (1960-1962) f 13.100\n', 
' '
]

I now want to insert newlines (\n) after all the patterns identified with this regular expression:

r" ([0-9]+[-][0-9])"

So the result should be, for example:

525-11
Prof.Dr.F.J.A.Kreuzer, Nijmegen  onderzoek met betrekking tot de fysiologie van ademhaling en bloedsomloop op grote hoogte  17.500

527-7 Dr.G.Buyze, Utrecht  onderzoek naar het kopermetabolisme bij geesteszicken  s 9.400

527-8  Prof. Dr. Elisabeth P.Steyn Parv, Utrecht onderzoek naar de betekenis van thiaminc voor de synthese van vetzuren in het dierlijk lichaam  s 5.400

I tried to make a loop in which all matching patterns are substituted with the same matching pattern + a new line. But this only seems to work one single time, so it looks like something goes wrong with the loop. Does anyone have an idea what specifically goes wrong?

    #import Regular Expression library
    import re

    #Open a the preprosseced text file
    g = open('outputtest2.txt', 'r')
    h = open('outputtest3.txt', 'w')
    SingularStringTextDOC = g.readlines()
    aanvr = re.compile(r" ([0-9]+[-][0-9])")

    #Test how the string works
    print(SingularStringTextDOC)

    #Make a Loop in which in every line in the text of outputtest1.txt is 
    searched for submission number
    for line in SingularStringTextDOC:
        if aanvr.match(line):
            AddLine = re.sub(r" ([0-9]+[-][0-9]+)", '\g<1>\n', line)

    #test result
    print(AddLine)

    #create a new file in which the new lines are added
    IsolatedSubmissionText_Aanvrnum = h.write(AddLine)

The result (including test prints):

[ ' 515-16  Prof. Dr.D.B.Kroon, Amsterdam onderzoek naar samenstelling en structuur van ooglens-ciwitten  f 16.900\n', 
" 521-21 Prof.Dr.E.C.Slater, Amsterdam  onderzoek over aard en werkingsmechanisme van de zogenaamde 'relaxing factor' (1960  1962)  f 12.000\n", 
' 525-11 Prof.Dr.F.J.A.Kreuzer, Nijmegen  onderzoek met betrekking tot de fysiologie van ademhaling en bloedsomloop op grote hoogte  17.500\n', 
' 527-7 Dr.G.Buyze, Utrecht  onderzoek naar het kopermetabolisme bij geesteszicken  s 9.400\n', 
' 527-8  Prof. Dr. Elisabeth P.Steyn Parv\xc3\xa9, Utrecht onderzoek naar de betekenis van thiaminc voor de synthese van vetzuren in het dierlijk lichaam  s 5.400\n', 
' 532-7 Dr.J.K. Sch\xc3\xb6nfeld, Rotterdam  onderzoek over de rol van de L-fase van bacteri\xc3\xabn bij chronische en recidiverende ziekten (1962)  f 3.100\n', 
' 532-8  A.G.Schuitemaker, Heiloo  onderzoek naar het lytisch vermogen van bacteriofagen voor mycobacteri\xc3\xabn f 2.000\n', 
' 542-13 Dr.B.Leijnse en Dr.H.M. van Praag, Rotterdam  bestudering van het werkingsmechanisme van de anti-depressieve hydrazinen, in bio chemisch en psychiatrisch-psychologisch opzicht  f 16.000\n', 
' 547-7 Dr.H.K.A. Visser, Groningen  onderzoek over de werking van het antidiuretische hormoon en de regulatie van de centrale afgifte van dit hormoon gedurende de kinderleeftijd (1962)  s 9.600\n', 
' 548-4 Dr.F.Schwarz, Utrecht  onderzoek naar de invloed van Exophthalmos Producing Substance op bindweefsel  s 13.000\n', 
' 562-8 Prof. Dr.J.Droogleever Fortuyn, Groningen  onderzoek naar bouw en functie van de middenhersenen (1960-1962) f 13.100\n', ' ']

562-8

Prof. Dr.J.Droogleever Fortuyn, Groningen  onderzoek naar bouw en functie van de middenhersenen (1960-1962) f 13.100

回答1:


I'm guessing that you might simply want to add word boundaries to your expression, also a + seems to be missing:

\s\b[0-9]+-[0-9]+\b

not sure though.

Test

import re

l = [' 525-11 Prof.Dr.F.J.A.Kreuzer, Nijmegen  onderzoek met betrekking tot de fysiologie van ademhaling en bloedsomloop op grote hoogte  17.500\n', 
' 527-7 Dr.G.Buyze, Utrecht  onderzoek naar het kopermetabolisme bij geesteszicken  s 9.400\n', 
' 527-8  Prof. Dr. Elisabeth P.Steyn Parv\xc3\xa9, Utrecht onderzoek naar de betekenis van thiaminc voor de synthese van vetzuren in het dierlijk lichaam  s 5.400\n', 
' 532-7 Dr.J.K. Sch\xc3\xb6nfeld, Rotterdam  onderzoek over de rol van de L-fase van bacteri\xc3\xabn bij chronische en recidiverende ziekten (1962)  f 3.100\n', 
' 532-8  A.G.Schuitemaker, Heiloo  onderzoek naar het lytisch vermogen van bacteriofagen voor mycobacteri\xc3\xabn f 2.000\n', 
' 542-13 Dr.B.Leijnse en Dr.H.M. van Praag, Rotterdam  bestudering van het werkingsmechanisme van de anti-depressieve hydrazinen, in bio chemisch en psychiatrisch-psychologisch opzicht  f 16.000\n', 
' 547-7 Dr.H.K.A. Visser, Groningen  onderzoek over de werking van het antidiuretische hormoon en de regulatie van de centrale afgifte van dit hormoon gedurende de kinderleeftijd (1962)  s 9.600\n', 
' 548-4 Dr.F.Schwarz, Utrecht  onderzoek naar de invloed van Exophthalmos Producing Substance op bindweefsel  s 13.000\n', 
' 562-8 Prof. Dr.J.Droogleever Fortuyn, Groningen  onderzoek naar bouw en functie van de middenhersenen (1960-1962) f 13.100\n', 
' '
]

regex = r"(\s\b[0-9]+-[0-9]+\b)"
subst = "\\1\\n"


for index,item in enumerate(l):
    l[index] = re.sub(regex, subst, item)

print(l)

Output

[' 525-11\n Prof.Dr.F.J.A.Kreuzer, Nijmegen onderzoek met betrekking tot de fysiologie van ademhaling en bloedsomloop op grote hoogte 17.500\n', ' 527-7\n Dr.G.Buyze, Utrecht onderzoek naar het kopermetabolisme bij geesteszicken s 9.400\n', ' 527-8\n Prof. Dr. Elisabeth P.Steyn Parvé, Utrecht onderzoek naar de betekenis van thiaminc voor de synthese van vetzuren in het dierlijk lichaam s 5.400\n', ' 532-7\n Dr.J.K. Schönfeld, Rotterdam onderzoek over de rol van de L-fase van bacteriën bij chronische en recidiverende ziekten (1962) f 3.100\n', ' 532-8\n A.G.Schuitemaker, Heiloo onderzoek naar het lytisch vermogen van bacteriofagen voor mycobacteriën f 2.000\n', ' 542-13\n Dr.B.Leijnse en Dr.H.M. van Praag, Rotterdam bestudering van het werkingsmechanisme van de anti-depressieve hydrazinen, in bio chemisch en psychiatrisch-psychologisch opzicht f 16.000\n', ' 547-7\n Dr.H.K.A. Visser, Groningen onderzoek over de werking van het antidiuretische hormoon en de regulatie van de centrale afgifte van dit hormoon gedurende de kinderleeftijd (1962) s 9.600\n', ' 548-4\n Dr.F.Schwarz, Utrecht onderzoek naar de invloed van Exophthalmos Producing Substance op bindweefsel s 13.000\n', ' 562-8\n Prof. Dr.J.Droogleever Fortuyn, Groningen onderzoek naar bouw en functie van de middenhersenen (1960-1962) f 13.100\n', ' ']

The expression is explained on the top right panel of regex101.com, if you wish to explore/simplify/modify it, and in this link, you can watch how it would match against some sample inputs, if you like.




回答2:


To get the value of AddLine you have to use print(AddLine) at the same indenting level right under AddLine = re.sub(r" ([0-9]+[-][0-9]+)", '\g<1>\n', line)

If you want the capturing group to start at a new line, you could prepend \n to the capturing group:

\n\g<1>\n

Note that in the pattern, you could also match the hyphen without the character class:

([0-9]+-[0-9]+)

Regex demo



来源:https://stackoverflow.com/questions/57433285/how-to-insert-a-newline-in-list-using-regex-in-python-2-7

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!