【发布时间】:2021-12-21 12:18:48
【问题描述】:
这似乎是一个相当简单的问题,但我无法让它工作。
我有一个文本文件,其中包含类似 JSON 的数据,但还有几行额外的行,阻止它成为有效的 JSON,我需要删除这些。这听起来很简单,甚至更简单,因为有效的 JSON 字符串(我可以稍后解析)总是包含在以下容器中:
xyz()
因此,例如,数据集将类似于:
abcdefg
xyz({"id_value": 123, "text_value": "efg"})
abcdefg
xyz({"id_value": 124, "text_value": "hij"})
每个单独的 JSON 字符串总是以 abcdefg 为前缀,然后是 xyz( 并且后面总是有一个右括号。所以格式是一致的。
我正在尝试以下方法:
re.findall(r'xyz\(.*?\)', text_file)
然而,尽管尝试了这种变化(例如,使用 re.search、尝试 \w+ 等),但似乎没有任何效果(我的意思是它返回一个空列表)。
如果我只是尝试执行以下操作:
re.findall(r'xyz\(
然后它返回:
['xyz(', 'xyz(']
正如预期的那样。
所以问题似乎出在括号中的字符串上,但我无法弄清楚问题出在哪里,因为这里的其他示例表明我的代码是正确的(它不可能是因为它不起作用)!
我认为它非常简单,但我有点卡住了!
【问题讨论】:
-
当 text_file 是本地定义的字符串时,
re.findall(r'xyz\((.*?)\)', text_file)对我有用。在你的情况下 text_file 是什么? -
也适合我。
-
这是令人沮丧的部分!这是我无法在此处复制的情况之一(我不允许发布实际文件),但结构与上述相同,因此没有意义(为避免怀疑,该文件是本地文本文件)!
-
你可能想要
import regex(在pip install regex之后)然后是[x.group() for x in regex.finditer(r'xyz(\((?:[^()]++|(?1))*\))', text_file) -
确实有效,非常感谢!