我的正则表达式在联机时的行为与python中的不同
因此,我目前正在尝试获取python中textract从pdf中提取的文本文档中的特定部分 这是我的正则表达式:我的正则表达式在联机时的行为与python中的不同,python,regex,Python,Regex,因此,我目前正在尝试获取python中textract从pdf中提取的文本文档中的特定部分 这是我的正则表达式: "\\n(Artikel|ARTIKEL)\s{0,}\d{0,}[EENENTWINTIG|EEN|TWEE|DRIE|VIER|VIJF|ZES|ZEVEN|ACHT|NEGEN|TIEN|ELF|TWAALF|DERTIEN|VIERTIEN|VIJFTIEN|ZESTIEN|ZEVENTIEN|ACHTTIEN|NEGENTIEN|TWINTIG|I|V|X]{0,}\s{0
"\\n(Artikel|ARTIKEL)\s{0,}\d{0,}[EENENTWINTIG|EEN|TWEE|DRIE|VIER|VIJF|ZES|ZEVEN|ACHT|NEGEN|TIEN|ELF|TWAALF|DERTIEN|VIERTIEN|VIJFTIEN|ZESTIEN|ZEVENTIEN|ACHTTIEN|NEGENTIEN|TWINTIG|I|V|X]{0,}\s{0,}[:.!?\\-–]{0,}\s{0,}([A-Za-z\s]{0,})\\r{0,}\\n"
重点是提取文档中的文章标题:
以下是一个在线示例:
所以在这个网站上,我的正则表达式工作得很好,然后,当我用下面的代码将它转换成python时,它有时会无缘无故地占用下一行代码
代码如下:
iterator = re.finditer("\\n(Artikel|ARTIKEL)\s{0,}\d{0,}[EENENTWINTIG|EEN|TWEE|DRIE|VIER|VIJF|ZES|ZEVEN|ACHT|NEGEN|TIEN|ELF|TWAALF|DERTIEN|VIERTIEN|VIJFTIEN|ZESTIEN|ZEVENTIEN|ACHTTIEN|NEGENTIEN|TWINTIG|I|V|X]{0,}\s{0,}[:.!?\\-–]{0,}\s{0,}([A-Za-z\s]{0,})\\r\\n",txtDict["files\\0730836602.pdf"]["text"])
match = next(iterator,"Dummy text")
while(match != "Dummy text"):
print(match.group(0))
match = next(iterator,"Dummy text")
结果如下:
rtikel 2. zetel
Artikel 3. Voorwerp
Artikel 4. Duur
Artikel 5. Inbrengen
Artikel 6. Stortingsplicht
Artikel 8. Aard van de aandelen
Artikel 9. Overdracht van aandelen onder de levenden
Artikel 10. De overgang van aandelen wegens overlijden
Artikel 11.
Artikel 12. Waardebepaling van aandelen bij overdracht onder levenden of overgang wegens
overlijden
Artikel 14. Bestuursorgaan
Artikel 15. Bevoegdheden van het bestuursorgaan
Artikel 16. Vergoeding
Het mandaat van de bestuurder is bezoldigd en is in overeenstemming met de werkelijk uitgeoefende
Artikel 17. Controle van de vennootschap
Artikel 18. Organisatie en bijeenroeping
Artikel 19. Vergaderen van de Algemene Vergadering
Artikel 20. Bevoegdheid van de algemene vergadering
Artikel 22. Beraadslagingen
Artikel 23. Verdaging
Elke gewone of buitengewone algemene vergadering kan door het bestuursorgaan tijdens de zitting
Artikel 24. Boekjaar
Artikel 26. Ontbinding
De vennootschap kan op elk moment worden ontbonden door beslissing van de algemene
Artikel 27. Vereffenaars
Artikel 29. Kennisgeving van wijzigingen
Artikel 30. Deontologie
Artikel 31. Woonstkeuze
Artikel 32. Gerechtelijke bevoegdheid
Artikel 33. Gemeen recht
毫无理由,它捕捉了artikel 26、16和12的下一句话
它可以在其他文档上实现这一点,但在线工具可以正确地捕获所有内容
所以,提前谢谢你,祝你有一个愉快的一天
尼古拉斯·马修您可以使用
(?m)^(Artikel|ARTIKEL)[^\S\r\n]*\d*(?:EENENTWINTIG|EEN|TWEE|DRIE|VIER|VIJF|ZES|ZEVEN|ACHT|NEGEN|TIEN|ELF|TWAALF|DERTIEN|VIERTIEN|VIJFTIEN|ZESTIEN|ZEVENTIEN|ACHTTIEN|NEGENTIEN|TWINTIG|I|V|X)*[^\S\r\n]*[:.!?–-]*[^\S\r\n]*([A-Za-z\t ]*)(?:\r*\n|\Z)
看
详细信息
-关于多行的(?m)
选项
-行的开头^
-其中一个词(Artikel | Artikel)
-0+水平空白[^\S\r\n]*
-0+位\d*
(?:EENENTWINTIG | EEN | TWEE | DRIE | VIER | VIJF | ZEVEN | ACHT | NEGEN | TIEN | ELF | TWAALF | DERTIEN | VIERTIEN VIJFTIEN | ZESTIEN | ZEVENTIEN | negatien NEGEN NEGEN | teen | twinach | | | ELF | twain | tertien | | | VIERTIEN VIJFTIEN VIJFTIEN
-0+水平空白[^\S\r\n]*
-0+更多[:.!?–-]*
,:
,
,
代码>,等等
-0+水平空白[^\S\r\n]*
-第2组:0+个字母、空格或制表符([A-Za-z\t]*)
-可选CR和LF或字符串结尾(?:\r*\n |\Z)
你的反斜杠不一致。有时你会用一两个反斜杠逃跑。在python中,在编写正则表达式时,使用原始字符串而不是字符串:
re.finditer(r”)“
而不是re.finditer(“”
),这样您就可以只使用一个反斜杠来转义字符。您正在对字符串文本进行在线测试,而需要对文本字符串进行测试。您不能期望正则表达式以相同的方式匹配两个不同的字符串。您还将字符类与分组混淆。在线测试仪中使用的字符串与字典中使用的字符串完全相同。伊托克的所有垃圾都是由于\s
造成的。(2\r\n\r\n\n)以及(以下以下::::::::::::::::::::::::::::::::本次调查中,rx=r=r=r,(?m)m)m)m)m)m)r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=r=m;m(m;m;m;m;m;m)m)m(m)m)m)m)的(m)m)m);X)*\S*[:.!?–-]*[^\S\r\n]*([A-Za-z\t]*)(?:\r*\n |\z)。参见注释我在评论中的建议中遗漏了一个\s
,我在回答中修复了它。
rx = r'(?m)^(Artikel|ARTIKEL)[^\S\r\n]*\d*(?:EENENTWINTIG|EEN|TWEE|DRIE|VIER|VIJF|ZES|ZEVEN|ACHT|NEGEN|TIEN|ELF|TWAALF|DERTIEN|VIERTIEN|VIJFTIEN|ZESTIEN|ZEVENTIEN|ACHTTIEN|NEGENTIEN|TWINTIG|I|V|X)*\s*[:.!?–-]*[^\S\r\n]*([A-Za-z\t ]*)(?:\r*\n|\Z)'