通过在文本文件中搜索 [ ] 创建列表

Create a list from searching a text file for [ ]

我正在尝试从正在读入 Python 的文本文件创建列表。文本文件在整个文件中包含一堆方括号 [此处有一些文本]。我想做的是首先计算我有多少个方括号对 [] 然后将其中的任何文本添加到列表中。

这是我尝试使用括号的文本文件的超级简化版本:

"[name] is going to the store! It's going to be at [place] on [day-of-the-week]."

这是我的资料:

bracket_counter = 0

file_name = "example.txt"
readFile = open(file_name)
text_lines = readFile.readlines()

for line in text_lines:
    val = line.split('[', 1)[1].split(']')[0]
    print(val)
    if line has [ and ]:
        bracket_counter += 1

我是 Python 的超级新手。我不知道我是否应该为此使用正则表达式,或者这是否会使事情过于复杂。

感谢您的帮助!

Python 没有 has 关键字。 您可能正在寻找类似的东西:

('[' in line) or (']' in line)

如果该行包含 [ 或 ],则计算结果为 True。

您当然可以为此使用正则表达式。在以下示例中,您将提取方括号内的所有内容并将它们存储在变量 words.

words = re.findall(r'\[([^\]]+)\]', line)

别忘了在程序的顶部 import re

正则表达式的解释:

  • \[\] 匹配方括号。由于这些也在正则表达式中使用,因此您必须使用反斜杠转义它们
  • (...) 是一个捕获组,正常括号内的所有正则表达式部分将作为结果返回(例如在列表 words
  • [^\]]+ 将匹配除 ]
  • 之外的所有字符

总而言之:

此正则表达式查找左方括号,然后匹配所有字符,直到出现右方括号,然后 returns 匹配列表中的内容。

如果有像我一样孤独的人想知道如何在不使用正则表达式的情况下做到这一点,我想这也可能是一个解决方案:

results = []
with open("example.txt") as read:
    for line in read:
        start = None; end = None
        for i,v in enumerate(line):
            if v == "[": start = i
            if v == "]": end = i
            if start is not None and end is not None:
                results.append(line[start+1:end])
                start = None; end = None

print(results)

结果:

['name', 'place', 'day-of-the-week']