我在目录中有一堆文件,其中包含以下哈希值:
%some_hash =
(
...
)
%some_other_hash =
(
...
)
以及文件中的一堆其他内容。我列出了该目录中的文件并在循环中读取它们。我想只提取上面的数据,括号中的所有内容以及之前的%字。当然也可以在里面放置支架。我试过的基本正则表达不起作用。他们在找到括号之后拆分文本。
我正在使用re.findall,所以我得到列表中的文件的所有内容。
答案 0 :(得分:0)
这是一个适合您的正则表达式:
%(?P<hash_string>[a-zA-Z_]+)\s?=(?:\s+)?(?P<hash_value>\(.*?\))
编译正则表达式时还需要使用re.DOTALL
标志。这样做是为了确保.
或\s
符合换行符\r
或\r\n
您可以在此处找到正则表达式的解释:https://regex101.com/r/wB5eH9/4
以下是一个例子:
>>> import re
>>> pattern = re.compile('%(?P<hash_string>[a-zA-Z_]+)\s?=(?:\s+)?(?P<hash_value>\(.*?\))', re.DOTALL)
>>> data = """
... %some_hash =
... (
... ...
... )
...
... %some_other_hash =
... (
... ...
... )"""
...
>>> pattern.findall(data)
[('some_hash', '(\n...\n)'), ('some_other_hash', '(\n...\n)')]