gpt4 book ai didi

python - 如何使用 Regex 根据模式将大文档分解为小文档?

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:03 25 4
gpt4 key购买 nike

大文档由小文档组成,这些小文档按模式分隔,如“1 of 1435 DOCUMENTS”。我想把它分解成 1435 个小文档。

 re_1 =  r"\d{1,4} of \d{1,4} DOCUMENTS.+?"

re_2 = r"\d{1,4} of \d{1,4} DOCUMENTS.+"

re_1 只给我“1435 份文件中的一份”等。re_2 给了我整个文档。

是否有办法将 re.findall 与正确的正则表达式一起使用?或者我必须做一个 re.split(对于这种情况来说这恰好是最简单的)或者循环遍历每一行并检查模式?谢谢!

1 of 1435 DOCUMENTS
blabla (multiple lines)

2 of 1435 DOCUMENTS
blabla(multiple lines)
3 of 1435 DOCUMENTS
blabla(multiple lines)
4 of 1435 DOCUMENTS
blabla(multiple lines)

5 of 1435 DOCUMENTS
....

最佳答案

对于 Python 3.7 之前的早期版本,您可以使用 re.findall

r'(?sm)^\d{1,4} of \d{1,4} DOCUMENTS.*?(?=^\d{1,4} of \d{1,4} DOCUMENTS|\Z)'

参见 regex demo

详情

  • (?sm) - re.Mre.S 选项
  • ^ - 行首
  • \d{1,4} of\d{1,4} DOCUMENTS - 1 to 4 digits, space, of, space, 1 to 4 digits,空格和 DOCUMENTS 子串
  • .*? - 任何 0 个或多个字符,尽可能少直到最接近
  • (?=^\d{1,4} of\d{1,4} DOCUMENTS|\Z) - ^\d{1,4} of\d{ 1,4} DOCUMENTS 模式或(|)字符串结尾(\Z)。

参见 Python demo :

import re
s = "TEXT_HERE"
print(re.findall(r'^\d{1,4} of \d{1,4} DOCUMENTS.*?(?=\d{1,4} of \d{1,4} DOCUMENTS|\Z)', s, re.M | re.S))
# => ['1 of 1435 DOCUMENTS\nblabla (multiple lines)\n\n', '2 of 1435 DOCUMENTS\nblabla(multiple lines)\n', '3 of 1435 DOCUMENTS\nblabla(multiple lines)\n', '4 of 1435 DOCUMENTS\nblabla(multiple lines)\n\n', '5 of 1435 DOCUMENTS\n....']

在 Python 3.7 中,re.split 可以使用您可以使用的零长度匹配进行拆分

r'(?m)(?!\A)(?=^\d{1,4} of \d{1,4} DOCUMENTS)'

参见 regex demo .

详情

  • (?m) - re.M 选项打开
  • (?!\A) - 不在字符串的开头-(?=^\d{1,4} of\d{1,4} DOCUMENTS) - 紧靠右边,必须有行首,1 到 4 位数字,空格, of,空格,1到4位数字,空格和DOCUMENTS子串

用法:

re.split(r'(?!\A)(?=^\d{1,4} of \d{1,4} DOCUMENTS)', text, flags=re.M)

关于python - 如何使用 Regex 根据模式将大文档分解为小文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55211957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com