如字符串
str1 = 'am I am am am am am pop pop sw sd amw amam wam wwam am'
要求去掉所有am,但是像amam、wam等不需要去除。
考虑:
1 am可能在str1开头。
2 am可能在str1中间。
3 am可能在str1结尾。
4 对于str1中某个单词来说 am又有可能出现在每个单词的开头、中间、结尾。
5 对于要去掉的am来说,要满足几个条件(a) am出现在str1开头并且am后面不能有字母等字符。(b)am出现在除开头的位置,并且这个单词一定以am结尾,且这个单词前边不能有字母等字符。
正则如下:
^am\b|\W+am\b
其中:
^ 匹配字符串的开头。
\W 匹配非字母数字及下划线。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
程序验证如下:
import re
str1 = 'am I am am am am am pop pop sw sd amw amam wam wwam am'
pattern = r"^am\b|\W+am\b"
result = re.sub(pattern, "", str1)
result = result.strip()
print(result) # I pop pop sw sd amw amam wam wwam
应用:可以应用这个思想去除list中所有指定值。