我想在python中使用正则表达式进行一些操作。
所以输入是+1223,+12_remove_me,+222,+2223_remove_me
和
输出应为+1223,+222
输出应该只包含逗号分隔的单词,这些单词不包含_remove_me
,每个单词之间只有一个逗号。
注意:我尝试了\+([0-9|+]*)_
,\+([0-9|+]*)
以及其他一些我没有得到输出的组合的REGEX。
注2 我不能使用循环,只需要使用正则表达式进行循环操作。
答案 0 :(得分:3)
你的正则表达式似乎不完整,但你走在了正确的轨道上。请注意,字符类中的管道符号被视为文字,[0-9|+]
与数字或|
或+
符号匹配。
您可以使用
,?\+\d+_[^,]+
请参阅regex demo
说明:
,?
- 可选,
(如果"字"位于字符串的开头,则应该是可选的)\+
- 文字+
\d+
- 1+位数_
- 字面下划线[^,]+
- ,
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)
答案 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)