Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串转换为列表的正则表达式(Python)_Python_Regex_String_List - Fatal编程技术网

将字符串转换为列表的正则表达式(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