使用Python在两个分隔符格式不同时提取两个分隔符之间的文本
我是一名新的Python程序员(在R方面有更多经验),使用Pycharm社区版v2019 2.4,使用运行Windows 10的笔记本电脑。我试图提取两个分隔符之间的文本块,通常采用以下格式。(文本位于分隔符之间,但在单独的行上) 我遇到的问题是,使用Python在两个分隔符格式不同时提取两个分隔符之间的文本,python,regex,text,text-mining,Python,Regex,Text,Text Mining,我是一名新的Python程序员(在R方面有更多经验),使用Pycharm社区版v2019 2.4,使用运行Windows 10的笔记本电脑。我试图提取两个分隔符之间的文本块,通常采用以下格式。(文本位于分隔符之间,但在单独的行上) 我遇到的问题是,第7项和第7A项可能有许多不同的格式,例如,由于文本文件的初始预处理 Item 7. text Item 7A. 或 或 或 项目7和项目7A也可以出现在较大的文本块中。这是一个我无法控制的问题 到目前为止,我已经检查了100个文本文件,并编写
第7项
和第7A项
可能有许多不同的格式,例如,由于文本文件的初始预处理
Item 7.
text
Item 7A.
或
或
或
项目7
和项目7A
也可以出现在较大的文本块中。这是一个我无法控制的问题
到目前为止,我已经检查了100个文本文件,并编写了以下代码
import glob
import os
from os.path import isfile
path = filepath`
for filename in glob.glob(os.path.join(path, '*.txt')):
with open(filename) as f:
data = f.read()
x = re.findall(r'Item 7(.*?)Item 7A',data, re.DOTALL)
"".join(x).replace('\n',' ')
print(x)
file = open('C:/R_Practice/dale1.txt', 'w')
file.write(str(x))
file.close()
这涉及到一些,但不是所有的情况,即使这样,它也没有检测到所有的情况。无法分析全套文本文件,因为整个研究将有近250000个文本文件。我的问题如下
任何帮助都将不胜感激。请在
项目
和7
之间使用\s
(这意味着任何类型的空格,包括换行符)
import glob
import os
from os.path import isfile
path = filepath
for filename in glob.glob(os.path.join(path, '*.txt')):
with open(filename) as f:
data = f.read()
x = re.findall(r'Item\s+7(.*?)Item\s+7A',data, re.DOTALL | re.IGNORECASE)
# here ___^^^ and ___^^^
"".join(x).replace('\n',' ')
print(x)
file = open('C:/R_Practice/dale1.txt', 'w')
file.write(str(x))
file.close()
你的意思是使用像
^item\d+[a-Z]?[:.]((?:\r?\n(?!item\d.*)*)*)
请重新格式化你的代码,此时它的格式不正确,无法处理。请尝试做一个例子。第四只鸟。我会试试这个正则表达式,看看会发生什么。如果你发送的正则表达式在同一行,不管是什么情况,都可以正常工作,但是我需要一些可以检查下一行的东西。如果“Item”和“7”之间有几个空格,Alsoit就不起作用。这段代码似乎可以捕获我需要的大多数情况,但我仍然无法将大小写设置为不敏感,并捕获字符串部分位于单独一行的情况。将进一步研究正则表达式,看看会发生什么。@Cerberus_64:添加不区分大小写的标志re.findall(r'Item\s+7(.*Item\s+7A',data,re.DOTALL | re.IGNORECASE)
添加带有管道/或符号的re.IGNORECASE似乎效果很好。谢谢,这帮了大忙@Toto@Cerberus_64:不客气,很高兴有帮助,请随意将答案标记为已接受,
ITEM 7
text
ITEM 7A:
Item
7
text
Item
7A.
import glob
import os
from os.path import isfile
path = filepath`
for filename in glob.glob(os.path.join(path, '*.txt')):
with open(filename) as f:
data = f.read()
x = re.findall(r'Item 7(.*?)Item 7A',data, re.DOTALL)
"".join(x).replace('\n',' ')
print(x)
file = open('C:/R_Practice/dale1.txt', 'w')
file.write(str(x))
file.close()
import glob
import os
from os.path import isfile
path = filepath
for filename in glob.glob(os.path.join(path, '*.txt')):
with open(filename) as f:
data = f.read()
x = re.findall(r'Item\s+7(.*?)Item\s+7A',data, re.DOTALL | re.IGNORECASE)
# here ___^^^ and ___^^^
"".join(x).replace('\n',' ')
print(x)
file = open('C:/R_Practice/dale1.txt', 'w')
file.write(str(x))
file.close()