我需要使用Python在“{}
”的List A
内打印行。我正在读出这些行并搜索字符串List A
,但我不确定如何只显示{}
中的行。
示例:
List A
{
name,
place,
animal,
thing
}
List B
{
Cat,
Dog,
}
更新:我尝试了打印(re.compile('List A \ n \ {\ n(。*)\ n \}',re.MULTILINE | re.DOTALL) .search(s).groups()[0])提到但它没有用。给我找不到错误组。
我试图找到字符串“List B”,但该dint工作。我在下面粘贴了我的代码。
import sys
input_file = open(r'path/input.txt')
Output_file = open('path/output.txt','w')
input_file_read = input_file.read()
for line in str(input_file_read):
output_file.write(line)
if line == "List B":
next(line)
print line
input_file_read是打开读取的输入文件,output_file是用于写入输出的输出文件。
问题:谁能告诉我为什么if语句不搜索字符串?以及如何在众多列表中搜索列表B?我只给出了一个输入文件的样本,但是有30个格式相同,但格式相同。谢谢你的帮助!!!
答案 0 :(得分:1)
处理任何List名称的更通用示例:
import re
s = '' # Put your content into s
for match in re.finditer(r'List\s+(\w+)\s*\{(.*?)\}', s, re.DOTALL)
print '-------New List--------'
print 'Name of List:', m.group(1)
print 'Content of List:', m.group(2)
答案 1 :(得分:-1)
import re
s = """
List A
{
name,
place,
animal,
thing
}
"""
print(re.compile('List A\\n\\{\n(.*)\\n\\}', re.MULTILINE | re.DOTALL)
.search(s).groups()[0])
输出:
name,
place,
animal,
thing
答案 2 :(得分:-1)
你从包含文本的字符串input_str
开始,然后使用正则表达式应该很快:
re.search(r'List A\n\s*\{\n(.*?)\n\s*\}', input_str, re.DOTALL).group(1)
给出
name,
place,
animal,
thing
您可以在正则表达式中看到文本的结构(\n
是换行符)。 .*?\n\}
匹配所有内容(.*
表示任意数量的任意字符,包括换行符,感谢DOTALL
)...但是只要遇到就停止 em>第一个结束括号(感谢?
)。 \s*
表示不同数量的空格(因为问题中的大括号并不总是精确地在行开始)。
如果你从一个文件开始,就像在你的例子中一样,那么可以使用上面的解决方案(使用input_str = input_file.read()
),但这有点浪费(因为这不必要地读取了List A组)。因此,另一种可能性是逐行读取文件并开始和停止收集数据(使用有限自动机)。但是,这似乎并不方便(除非您使用外部解析模块)。所以,如果你的文件不是太大,我认为上面的正则表达式解决方案是合适的。