使用python正则表达式找到重复的表达式

时间:2011-05-23 04:34:02

标签: python regex

您好我正在尝试从文件中检索以下字符串

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

模式{number1 number2... }有所不同,有些是短的,有些则太长。我想找到这样的模式。我的逻辑是检索语句"neighbors= {",后跟一个数字和一个空格作为重复,直到程序找到最后一个闭括号。有人可以用语法帮助我吗?

由于

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

这是关于你要求的:

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

使其更容忍{}支架周围的一些可选空格:

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

或更短的一个:

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

答案 2 :(得分:1)

我会用整个行中的邻居,提取大括号之间的字符串,按空格分割然后我有一个字符串数组可以转换为整数