正则表达式删除python

时间:2016-03-30 14:30:38

标签: python regex python-2.7

我想在python中使用正则表达式进行一些操作。

所以输入是+1223,+12_remove_me,+222,+2223_remove_me 和 输出应为+1223,+222

输出应该只包含逗号分隔的单词,这些单词不包含_remove_me,每个单词之间只有一个逗号。

注意:我尝试了\+([0-9|+]*)_\+([0-9|+]*)以及其他一些我没有得到输出的组合的REGEX。

注2 我不能使用循环,只需要使用正则表达式进行循环操作。

4 个答案:

答案 0 :(得分:3)

你的正则表达式似乎不完整,但你走在了正确的轨道上。请注意,字符类中的管道符号被视为文字,[0-9|+]与数字或|+符号匹配。

您可以使用

,?\+\d+_[^,]+

请参阅regex demo

说明:

  • ,? - 可选,(如果"字"位于字符串的开头,则应该是可选的)
  • \+ - 文字+
  • \d+ - 1+位数
  • _ - 字面下划线
  • [^,]+ - ,
  • 以外的1个字符

Python demo

import re
p = re.compile(r',?\+\d+_[^,]+')
test_str = "+1223,+12_remove_me,+222,+2223_remove_me"
result = p.sub("", test_str)
print(result)
# => +1223,+222

答案 1 :(得分:0)

在您的情况下,您需要协商正则表达式

[^(_remove_me)]

Demo

答案 2 :(得分:0)

非正则表达式方法将涉及使用str.split()并排除以_remove_me结尾的项目:

>>> s = "+1223,+12_remove_me,+222,+2223_remove_me"
>>> items = [item for item in s.split(",") if not item.endswith("_remove_me")]
>>> items
['+1223', '+222']

或者,如果_remove_me可以出现在每个项目的任何位置,请使用not in

>>> items = [item for item in s.split(",") if "_remove_me" not in item]
>>> items
['+1223', '+222']

然后,您可以使用str.join()将项目再次加入字符串:

>>> ",".join(items)
'+1223,+222'

答案 3 :(得分:0)

你可以在没有正则表达式的情况下执行此操作,只需使用字符串操作。以下内容可以作为单行编写,但为了便于阅读而进行了扩展。

my_string = '+1223,+12_remove_me,+222,+2223_remove_me' #define string
my_list = my_string.split(',')                         #create a list of words
my_list = [word for word in my_list if '_remove_me' not in word] #stop here if you want a list of words
output_string = ','.join(my_list)