在它之后用平衡的括号匹配单词

时间:2015-11-19 02:05:26

标签: python regex

我在目录中有一堆文件,其中包含以下哈希值:

%some_hash = 
(
...
)

%some_other_hash = 
(
...
)

以及文件中的一堆其他内容。我列出了该目录中的文件并在循环中读取它们。我想只提取上面的数据,括号中的所有内容以及之前的%字。当然也可以在里面放置支架。我试过的基本正则表达不起作用。他们在找到括号之后拆分文本。

我正在使用re.findall,所以我得到列表中的文件的所有内容。

1 个答案:

答案 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)')]