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)