您好我正在尝试从文件中检索以下字符串
neighbors= {5 7 9 11 13 14 15 16 17 }
模式{number1 number2... }
有所不同,有些是短的,有些则太长。我想找到这样的模式。我的逻辑是检索语句"neighbors= {"
,后跟一个数字和一个空格作为重复,直到程序找到最后一个闭括号。有人可以用语法帮助我吗?
由于
答案 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)
我会用整个行中的邻居,提取大括号之间的字符串,按空格分割然后我有一个字符串数组可以转换为整数