我的正则表达式在联机时的行为与python中的不同

我的正则表达式在联机时的行为与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

因此,我目前正在尝试获取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,}[:.!?\\-–]{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)
    -其中一个词
  • [^\S\r\n]*
    -0+水平空白
  • \d*
    -0+位
  • (?: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
  • [^\S\r\n]*
    -0+水平空白
  • [:.!?–-]*
    -0+更多
    ,等等
  • [^\S\r\n]*
    -0+水平空白
  • ([A-Za-z\t]*)
    -第2组:0+个字母、空格或制表符
  • (?:\r*\n |\Z)
    -可选CR和LF或字符串结尾
见:


你的反斜杠不一致。有时你会用一两个反斜杠逃跑。在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)'