程序输出包含以下格式的行的文件
{Foo} Bar Bacon {Egg}
其中Foo
和Egg
可以但不必由几个单词组成。 Bar
和Bacon
始终是一个单词。
我需要在变量中获取Bar
以获取更多代码。我想如果我将sting分成匹配的正则表达式,这将有效。这将返回四个元素的列表,因此我可以轻松地使用list[1]
获取第二个元素。
我怎么写这样的正则表达式?
我需要在单个空格' '
上拆分sting,但前提是该单个空格未被花括号中的文本包围。
\s(?=[a-zA-Z{}])
为我提供了所有空格,因此行为与' '
完全相同。如何排除花括号中的空格?
答案 0 :(得分:2)
这可能会有所帮助。
>>> import re
>>> line = '{Foo} Bar Bacon {Egg}'
>>> m = re.search(r'}\s+(\S+)\s+', line)
>>> m.group(1)
'Bar'
>>>
我刚搜索了一个关闭括号后的任何单词。我使用()
对该字进行分组,以便稍后使用m.group()
如果您真的想要所有四个元素,请尝试re.findall()
:
>>> line = '{Foo Goo} Bar Bacon {Egg Foo}'
>>> re.findall(r'{.*?}|\S+', line)
['{Foo Goo}', 'Bar', 'Bacon', '{Egg Foo}']
答案 1 :(得分:2)
您可以尝试{[^}]*}\s(\w+)
>>> import re
>>> print re.search(r'{[^}]*}\s(\w+)', '{Foo} Bar Bacon {Egg}').group(1)
Bar
说明:
{[^}]*}
首先匹配花括号内的第一部分\s
然后是空白(\w+)
然后是第二部分;您将其放入捕获组,因此它在搜索结果中可用group(1)
re.search(pattern, string, flags=0)
扫描字符串,查找正则表达式模式生成匹配项的第一个位置,并返回相应的匹配对象。如果字符串中没有位置与模式匹配,则返回None;请注意,这与在字符串中的某个点找到零长度匹配不同。