繁体   English   中英

某些字符之间的正则表达式捕获

[英]Regex capture between certain characters

我对 Python 和正则表达式很陌生。 我快到了,但 6 小时后未能解决此问题。 希望有人能提供帮助。

我的字符串如下:

str_1 =  & peers & & apples & & lemon juice & & Strawberries & & Mellon & 

我想要一个包含以下内容的新列表: ['peers','apples','lemon juice','Strawberries','Mellon'] 所以没有所有的空格和&标志。

我的代码如下:

list_1 = re.compile(r'(?<=&)(.*?)(?=&)').findall(str_1)

但是,我得到这样的东西:

list_1 =  [' peers ', ' ', ' apples ', ' ', ' lemon juice ', ' ', ' Strawberries ', ' ', ' Mellon']

有人可以帮忙得到:

['peers','apples','lemon juice','Strawberries','Mellon']

你不需要正则表达式

>>> str_1 =  '& peers & & apples & & lemon juice & & Strawberries & & Mellon &'
>>> ls = [x.strip() for x in str_1.split('&')]
>>> ls = [x for x in ls if x]
>>> ls
['peers', 'apples', 'lemon juice', 'Strawberries', 'Mellon']

如果你仍然想要一个正则表达式,那么

>>> re.findall(r'[^& ][^&]*[^& ]', str_1)
['peers', 'apples', 'lemon juice', 'Strawberries', 'Mellon']

如果你必须使用正则表达式,你可以使用

re.findall(r'[^&\s]+(?:[^&]*[^&\s])?', str_1)

请参阅正则表达式演示 详情

  • [^&\s]+ - 除了&和空格之外的一个或多个字符 - (?:[^&]*[^&\s])? - 除&之外的任何字符的可选序列,然后是除&或空格之外的字符。

请参阅Python 演示

import re
str_1 = "& peers & & apples & & lemon juice & & Strawberries & & Mellon & "
print( re.findall(r'[^&\s]+(?:[^&]*[^&\s])?', str_1) )
# => ['peers', 'apples', 'lemon juice', 'Strawberries', 'Mellon']

一个非正则表达式的解决方案看起来像

[x.strip() for x in str_1.split('&') if x.strip()]

请参阅此 Python 演示 在这里,您用&字符拆分一个字符串,只保留不为空或全是空白的项目,前导/尾随空格被去除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM