社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何在Python2.7中循环重复替换模式匹配?

Martijn van der Meer • 5 年前 • 1302 次点击  

我正在尝试从OCR扫描中生成有序的数据集。我已经对结果进行了预处理,制作了一个包含所有“单元”的列表,用换行符分隔。 这看起来像这样:

[' 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', 
' '
]

我现在要插入新行( \n )在使用此正则表达式标识所有模式之后:

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

因此,结果应该是,例如:

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

我试着做一个循环,在这个循环中,所有匹配的模式都被同一个匹配的模式+一个新行替换。但这似乎只起一次作用,所以看起来循环出了问题。有人知道具体出了什么问题吗?

    #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)

结果(包括测试图):

[ ' 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
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50388
 
1302 次点击  
文章 [ 2 ]  |  最新文章 5 年前
The fourth bird
Reply   •   1 楼
The fourth bird    5 年前

要获取AddLine的值,必须使用 print(AddLine) 在同一缩进水平下 AddLine = re.sub(r" ([0-9]+[-][0-9]+)", '\g<1>\n', line)

如果您希望捕获组从新的行开始,可以预先 \n 对于捕获组:

\n\g<1>\n

注意,在模式中,也可以匹配不带字符类的连字符:

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

Regex demo

Emma
Reply   •   2 楼
Emma    5 年前

我猜你可能只是想在你的表达式中添加单词边界,还有 + 好像不见了:

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

但不确定。

测试

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)

输出

['525-11\n教授F.J.A.Kreuzer,Nijmegen onderzoek met betrekking 范阿德姆哈林酒店 17.500\n','527-7\n Buyze博士,Utrecht onderzoek naar het kopermetabolisme bij geesteszicken s 9.400\n','527-8\n教授。 Elisabeth P.Steyn Parv,乌得勒支onderzoek naar de betekenis van 蒂亚明·沃德·辛瑟斯·范·维特祖伦 5.400\n','532-7\n Dr.J.K.SchÃ131; nfeld,鹿特丹onderzoek over de rol van de L-fase van bacterià ziekten(1962)f 3.100\n','532-8\n A.G.Schuitemaker,海洛 onderzoek naar het lytisch vermogen van细菌学 分枝杆菌素f 2.000,542-13 鹿特丹普拉格最佳范赫特范德 生物化学中的抗抑郁肼 精神病学心理学家opzicht f 16.000\n','547-7\n Dr.H.K.A。 维瑟,格罗宁根·昂德佐克,在德韦金·范赫特·安蒂乌雷蒂街 管理中心管理中心 gedurende Kindereleftijd(1962)第9.600节,第548-4节 F.Schwarz博士,乌得勒支onderzoek naar de invloed van眼球突出症 生产物质op bindweefsel s 13.000\n','562-8\n Prof。 Dr.J.Drooglever Fortuyn,Groningen onderzoek naar bouw en functie博士 范德米登赫森恩(1960-1962)f 13.100,'''

表达式在 regex101.com ,如果您希望浏览/简化/修改它,则在 this link ,如果愿意的话,可以查看它与一些示例输入的匹配情况。