Python正则表达式从字符串中删除电子邮件

时间:2017-05-17 14:38:41

标签: python regex

需要替换字符串中的电子邮件,所以:

inp = 'abc user@xxx.com 123 any@www foo @ bar 78@ppp @5555 aa@111"

应该导致:

out = 'abc 123 foo bar"

使用什么正则表达式?

In [148]: e = '[^\@]\@[^\@]'
In [149]: pattern = re.compile(e)
In [150]: pattern.sub('', s)  
Out[150]: 'one aom 123 4two'
In [151]: s
Out[151]: 'one ab@com 123 4 @ two'

对我不起作用

3 个答案:

答案 0 :(得分:6)

替换:
\S*@\S*\s?
由''
演示here

一些解释:
\S*:匹配尽可能多的非空格字符 @:然后是@
\S*:然后是另一系列非空格字符
\s?:最后是一个空间,如果有的话。注意'?'需要匹配行尾的地址。由于'?'的贪婪,如果有空格,它将始终匹配。

答案 1 :(得分:1)

我个人更喜欢自己进行字符串解析。让我们尝试拆分字符串并删除具有@符号的项目:

inp = 'abc user@xxx.com 123 any@www foo @ bar 78@ppp @5555 aa@111'
items = inp.split()

现在我们可以这样做:

>>> [i for i in items if '@' not in i]
['abc', '123', 'foo', 'bar']

这让我们几乎到了那里。让我们稍微修改一下以添加join

>>> ' '.join([i for i in inp.split() if '@' not in i])
'abc 123 foo bar'

它可能不是RegEx,但它适用于您提供的输入。

答案 2 :(得分:0)

out = ' '.join([item for item in inp.split() if '@' not in item])