将字符串转换为列表的正则表达式(Python)
程序输出具有以下格式行的文件将字符串转换为列表的正则表达式(Python),python,regex,string,list,Python,Regex,String,List,程序输出具有以下格式行的文件 {Foo} Bar Bacon {Egg} 其中Foo和Egg可以,但不必,由几个词组成。酒吧和培根总是一个词 我需要在一个变量中输入Bar,以便进一步编写代码。我想,如果我在匹配的正则表达式上拆分sting,这将起作用。这将返回一个包含四个元素的列表,因此我可以用list[1]轻松地得到第二个元素 我将如何编写这样一个正则表达式 我需要在单个空格“”上拆分sting,但前提是该单个空格未被大括号中的文本包围 \s?=[a-zA-Z{}]为我提供所有空格,因此其行
{Foo} Bar Bacon {Egg}
其中Foo和Egg可以,但不必,由几个词组成。酒吧和培根总是一个词
我需要在一个变量中输入Bar,以便进一步编写代码。我想,如果我在匹配的正则表达式上拆分sting,这将起作用。这将返回一个包含四个元素的列表,因此我可以用list[1]轻松地得到第二个元素
我将如何编写这样一个正则表达式
我需要在单个空格“”上拆分sting,但前提是该单个空格未被大括号中的文本包围
\s?=[a-zA-Z{}]为我提供所有空格,因此其行为与“”完全相同。如何排除大括号中的空格?这可能会有所帮助
>>> import re
>>> line = '{Foo} Bar Bacon {Egg}'
>>> m = re.search(r'}\s+(\S+)\s+', line)
>>> m.group(1)
'Bar'
>>>
我只是搜索了紧跟在大括号后面的任何单词。我过去常常把这个词分组,以便以后可以用m.group访问它
如果您确实想要所有四个元素,请尝试re.findall:
您可以尝试{[^}]*}\s\w+
说明:
{[^}]*}首先匹配花括号内的第一部分
\然后是空白
\w+然后是第二部分;您将它放在一个捕获组中,因此它在搜索结果中作为group1提供
re.searchpattern,字符串,标志=0
扫描字符串,查找正则表达式模式生成匹配的第一个位置,并返回相应的匹配对象。如果字符串中没有与模式匹配的位置,则返回None;请注意,这与在字符串中的某个点查找零长度匹配不同
尝试重新搜索?
>>> line = '{Foo Goo} Bar Bacon {Egg Foo}'
>>> re.findall(r'{.*?}|\S+', line)
['{Foo Goo}', 'Bar', 'Bacon', '{Egg Foo}']
>>> import re
>>> print re.search(r'{[^}]*}\s(\w+)', '{Foo} Bar Bacon {Egg}').group(1)
Bar