如何使用正则表达式删除带有空格的字符串(由特殊字符组成)?

时间:2019-09-03 12:35:36

标签: python regex

使用Python编程。

我有两个由字符串组成的列表:

  1. 列表1:字符串由字母组成,例如a,b,c,d,''(单个空格),

  2. 列表2:字符串由特殊字符$,€,&,%,''(单个空格)组成。

示例:

list1 = ['a    ', 
         'ab   ', 
         'ba  c', 
         ' a b ',
         'abd  ']

list2 = ['$    ', 
         '€&   ', 
         '€%  &', 
         ' $ € ',
         '€&$  ']

两个列表中的实际问题均超过5个元素。 目标是:

1. to remove elements like: 'ba  c', ' a b ' from list1
2. to remove elements like: '€%  &', ' $ € ' from list2

我能够分两个步骤实现目标1:

步骤1:

list1[:] = [word for word in list1 if not (word[0] == ' ')]

第2步:

import re
regex1 = r"\s[\w]\s*" 
list1[:] = [word for word in list1 if not (re.search(regex1, word))]

对于list2,我能够:

list2[:] = [word for word in list2 if not (word[0] == ' ')]

删除

之类的元素
' $ € '

但是

regex2 = r"\s[\W]\s*" # on list 2

不会删除

之类的元素
'€%  &'

问题:

  1. 将list1上应用的step1和step2组合在一起的正则表达式是什么?

  2. 什么是正确的正则表达式而不是regex2?

  3. 如果list1和list2是串联的

    list12 =['a    ', 
             'ab   ', 
             'ba  c', 
             ' a b ',
             'abd  ',
             '$    ', 
             '€&   ', 
             '€%  &', 
             ' $ € ',
             '€&$  ']
    

删除诸如以下元素的正则表达式是什么

'ba  c', ' a b ', '€%  &', ' $ € '

如果存在以下模式,则从列表中删除该元素:

  1. 如果字符串的首字母是''(单个空格),例如'abcd','€€$%'

  2. 如果字符串的字符之间存在''(单个空格),例如'€%&','a b c','%&€€'

感谢您的帮助。谢谢。 :)

1 个答案:

答案 0 :(得分:2)

如果模式要匹配左对齐的单词,则代码可能如下所示:

list12[:] = [word for word in list12 if re.match(r'^\S+\s*$', word)]

此代码将仅匹配末尾包含空格的字符串。 结果是:

a    
ab   
abd  
$    
€&   
€&$