Python 基于行内容分配变量

Python 基于行内容分配变量,python,regex,Python,Regex,我有以下文件(示例): 但是,我不确定每次通过另一行时如何更改该值 到目前为止,我唯一尝试过的一件事是使用正则表达式来搜索我想要的值:pattern='' 我还尝试了以下代码 for LINE in FILE: VALUE = re.findall(pattern, LINE) print("{}: {}".format(VALUE, LINE)) 这个打印出来: ['First']: <b n="First"> []: <v n="1">Conte

我有以下文件(示例):

但是,我不确定每次通过另一行时如何更改该值

到目前为止,我唯一尝试过的一件事是使用正则表达式来搜索我想要的值:
pattern=''

我还尝试了以下代码

for LINE in FILE:
    VALUE = re.findall(pattern, LINE)
    print("{}:   {}".format(VALUE, LINE))
这个打印出来:

['First']: <b n="First">
[]: <v n="1">Contents</v>
[]: <v n="1">Contents</v>
[]: <v n="1">Contents</v>
[]: <v n="1">Contents</v>
['Second']: <b n="Second">
[]: <v n="1">Contents</v>
[]: <v n="1">Contents</v>
[]: <v n="1">Contents</v>
[]: <v n="1">Contents</v>
[]: <v n="1">Contents</v>
['Third']: <b n="Third">
[]: <v n="1">Contents</v>

有人能给我指出实现这一输出的正确方向吗?

事实上,你已经非常接近了

这里有一种方法与您的方法相近:

  • 将当前标题设置为“

  • 对于每一行,检查该行是否包含标题,即是否以
    开头。我发现另一种方法仅使用正则表达式:

    <b n=\"(.*)\"|<.* n=\"(.*)\">(.*)?<.*$
    

    使用parserFixed可能更好,对此表示抱歉。为了确认,我希望它是“第一:内容”
    
    ['First']: <b n="First">
    []: <v n="1">Contents</v>
    []: <v n="1">Contents</v>
    []: <v n="1">Contents</v>
    []: <v n="1">Contents</v>
    ['Second']: <b n="Second">
    []: <v n="1">Contents</v>
    []: <v n="1">Contents</v>
    []: <v n="1">Contents</v>
    []: <v n="1">Contents</v>
    []: <v n="1">Contents</v>
    ['Third']: <b n="Third">
    []: <v n="1">Contents</v>
    
    First: Contents
    First: Contents
    First: Contents
    First: Contents
    Second: Contents
    Second: Contents
    Second: Contents
    Second: Contents
    Third: Contents
    
    title = ""
    for line in file:
        match = re.match(r'<b n="([^"]*)">', line)
        if match is not None:
            title = match.group(1)
        else:
            match = re.search(r'>(\w*)</v>', line)
            if match is not None:
                content = match.group(1)
                print("{}: {}".format(title, content))
    
    <b n=\"(.*)\"|<.* n=\"(.*)\">(.*)?<.*$
    
    import re
    
    regex = r"<b n=\"(.*)\"|<.* n=\"(.*)\">(.*)?<.*"
    
    test_str = ("""<b n="First">
    <v n="1">Contents</v>
    <v n="1">Contents</v>
    <v n="1">Contents</v>
    <v n="1">Contents</v>
    <b n="Second">
    <v n="1">Contents</v>
    <v n="1">Contents</v>
    <v n="1">Contents</v>
    <v n="1">Contents</v>
    <v n="1">Contents</v>
    <b n="Third">
    <v n="1">Contents</v>""")
    
    matches = re.findall(regex, test_str)
    
    for a, b, c in matches:        
        if a:
            name = a
        if c:
            print(name, ': ', c)