使用Python正则表达式查找重复的表达式
你好,我正在尝试从一个文件中获取以下字符串
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()
的情况。