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

问题描述 投票:2回答:2

程序输出具有以下格式的行的文件

{Foo} Bar Bacon {Egg}

FooEgg可以,但不必,由几个词组成。 BarBacon总是一个字。

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

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

我需要在单个空格' '上拆分sting,但是只有当单个空格没有被花括号中的文本包围时。

\s(?=[a-zA-Z{}])给了我所有的空间,因此表现得像' '。如何排除花括号中的空格?

python regex string list
2个回答
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


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}']
© www.soinside.com 2019 - 2024. All rights reserved.