Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用正则表达式根据模式将大文档分解为小文档?_Python_Regex - Fatal编程技术网

Python 如何使用正则表达式根据模式将大文档分解为小文档?

Python 如何使用正则表达式根据模式将大文档分解为小文档?,python,regex,Python,Regex,大文档由小文档组成,小文档之间用“1435个文档中的1个”这样的模式分隔。我想把它分解成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份文件中的1份”等。 re_2给了我整个文件 如果有办法使用re.findall和适当的正则表达式? 或者我必须重新拆分(这在这种情况下最容易),或者在每一行上循环检查模式?谢谢大家! 1 o

大文档由小文档组成,小文档之间用“1435个文档中的1个”这样的模式分隔。我想把它分解成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份文件中的1份”等。 re_2给了我整个文件

如果有办法使用re.findall和适当的正则表达式? 或者我必须重新拆分(这在这种情况下最容易),或者在每一行上循环检查模式?谢谢大家!

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

详细信息

  • (?sm)
    -
    re.M
    re.S
    上的选项
  • ^
    -行首
  • \d{1,4}个\d{1,4}文档
    -1到4个数字,空格,
    ,空格,1到4个数字,空格和
    文档
    子字符串
  • *?
    -任意0个或更多字符,尽可能少到最接近的字符数
  • (?=^\d{1,4}个{1,4}文档|\Z)
    -
    ^\d{1,4}个{1,4}文档
    模式或(
    )字符串的结尾(
    \Z
见:

在Python3.7中,
re.split
可以使用零长度匹配进行分割

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

详细信息

  • (?m)
    -
    re.m
    选项已打开
  • (?!\A)
    -不在字符串开头 -
    (?=^\d{1,4}of\d{1,4}文档)
    -右边必须有一行开头,1到4位,空格,
    ,空格,1到4位,空格和
    文档
    子字符串
用法:

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

您可以在Python 3.7中使用
re.split(r'(?!\A)(?=^\d{1,4}of\d{1,4}文档),text,flags=re.M)
。非常感谢。
re.split(r'(?!\A)(?=^\d{1,4} of \d{1,4} DOCUMENTS)', text, flags=re.M)