使用Python正则表达式查找重复的表达式

2 投票
3 回答
795 浏览
提问于 2025-04-16 18:09

你好,我正在尝试从一个文件中获取以下字符串

neighbors= {5 7 9 11 13 14 15 16 17 }

这个模式 {number1 number2... } 是变化的,有的比较短,有的则很长。我想找到这样的模式。我的想法是先找到这个语句 "neighbors= {",然后后面跟着一个数字和一个空格,重复这个过程,直到程序找到最后一个闭合的大括号。有人能帮我解决语法问题吗?

谢谢

3 个回答

1

这段内容是关于你问的问题的:

neighbors= \{ (\d+ )+\}

让代码对大括号 {} 周围的一些可选空格更加宽容:

neighbors= ?\{ ?(\d+ )+(\}|\d+\})

或者可以用一个更简短的方式:

neighbors\s*=\s*\{[\d\s]+\}
1

我会先找到包含“neighbors”这个词的整行内容,然后提取出大括号里的字符串。接着,我会把这个字符串按照空格分开,这样就能得到一个字符串数组,最后可以把这些字符串转换成整数。

2

我想你在找这个:

import re
FOO = """neighbors= {5 7 9 11 13 14 15 16 17 }"""
match = re.search('(neighbors\s*=\s*\{\s*(\d+\s*)+\})', FOO)
print match.group(1)

这个正则表达式可以在很多不同的编程语言中使用。

运行这个会得到...

neighbors= {5 7 9 11 13 14 15 16 17 }

不过这个正则表达式会匹配大括号里面的任意数量的数字。

编辑

re.findall()re.compile() 来说明一下...

import re
FOO = """neighbors= {5 7 9 11 13 14 15 16 17 }"""
COMPILE = re.compile('(neighbors\s*=\s*\{\s*(\d+\s*)+\})')
match = re.findall(COMPILE, FOO)
print match[0]

运行第二段代码会返回...

neighbors= {5 7 9 11 13 14 15 16 17 }

不过你要记住,.findall() 是用来查找目标字符串中正则表达式匹配的多个出现的。提供的例子并没有展示出需要使用 .findall() 的情况。

撰写回答