正则表达式将字符串转换为列表(Python)

时间:2018-03-06 21:18:52

标签: python regex string list

程序输出包含以下格式的行的文件

{Foo} Bar Bacon {Egg}

其中FooEgg可以但不必由几个单词组成。 BarBacon始终是一个单词。

我需要在变量中获取Bar以获取更多代码。我想如果我将sting分成匹配的正则表达式,这将有效。这将返回四个元素的列表,因此我可以轻松地使用list[1]获取第二个元素。

我怎么写这样的正则表达式?

我需要在单个空格' '上拆分sting,但前提是该单个空格未被花括号中的文本包围。

\s(?=[a-zA-Z{}])为我提供了所有空格,因此行为与' '完全相同。如何排除花括号中的空格?

2 个答案:

答案 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

Demo

说明:

  • {[^}]*}首先匹配花括号内的第一部分
  • \s然后是空白
  • (\w+)然后是第二部分;您将其放入捕获组,因此它在搜索结果中可用group(1)
  

re.search(pattern, string, flags=0)

     

扫描字符串,查找正则表达式模式生成匹配项的第一个位置,并返回相应的匹配对象。如果字符串中没有位置与模式匹配,则返回None;请注意,这与在字符串中的某个点找到零长度匹配不同。

https://docs.python.org/3/library/re.html#re.search