python - 使用重复嵌套模式从文本文件中提取文本

标签 python regex text-extraction

我正在努力从文件中提取文本。文本格式如下,其中[]表示分隔符。

文件文本:

[数据集 1]“文本”[文件名 1]“文本”[文件名 2]“文本”[关键数据分隔符]!关键数据! [关键数据分隔符]“文本”[文件名 3]“文本”[数据集 2]“文本”[文件名 1][关键数据分隔符]关键数据[关键数据分隔符]“文本”[文件名2] [数据集 3]...

期望的输出:

[Dataset 1], [Filename 2], !key data!.
[Dataset 2], [Filename 1], !key data!.

文件名位于该文件名之后,键分隔符出现在另一个数据集之前。每个数据集只有一个包含关键数据的文件。

f = open('file.txt', 'r')
TextBetween_KeyDataDelimeter = re.findall('KeyDataDelimeter(.+?)KeyDataDelimiter',f.read(), re.DOTALL)

我正在考虑使用 if/else 语句嵌套 for 循环,但这看起来很困惑。有人可以指出我应该阅读的文档来帮助我吗?

最佳答案

这是一个没有正则表达式的选项,只有一些字符串和列表操作。有点复杂,但它有效:

kds = """[Dataset 1] "text1" [Filename 1] "text2" [Filename 2] "text3" [Key Data Delimiter] !key data1![Key Data Delimiter] "text4" [Filename 3] "text5" [Dataset 2] "text6" [Filename 1] [Key Data Delimiter] key data2 [Key Data Delimeter] "text7" [Filename 2]"""

# split the text file into datasets
nkds = kds.replace('[Dataset','xxx[Dataset').split('xxx')

for k in nkds[1:]:
    entry = ''
    #split each dataset into components
    nk = k.replace('[','xxx[').split('xxx')[1:]
    #get the name of the dataset
    entry+= nk[0].replace(']',']xxx').split('xxx')[0]
    for k in nk:
        #find the index position of the delimiter in the dataset list
        if '[Key Data Delimiter]' in k:
            #get the previous index position for the file name
            file_ind = nk.index(k)-1
            entry+= nk[file_ind].replace(']',']xxx').split('xxx')[0]
            entry+= k.split(']')[1].strip()
            break
    print(entry)

输出:

[Dataset 1][Filename 2]!key data1!
[Dataset 2][Filename 1]key data2

关于python - 使用重复嵌套模式从文本文件中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72944738/

相关文章:

html - 通过排除导航和 chrome 内容从 HTML 页面中提取纯内容/文本

python - 如何使用 python 获取主题 dn

python - Python 3.5 中的 F 字符串无效语法

python - Pandas 比较 Dataframe 中的行

python - 仅从具有 `importlib` 的 Python 模块导入特定类

javascript - 正则表达式 - 我做错了什么吗?

java - 从文件中读取模式与字符串文字

excel - 使用幂查询按数字字符串的最小长度从文本中提取数字

php - 从邮箱字符串中获取电子邮件地址

pdf - 分析pdf文件的格式并提取文本和图像