我正在处理有时存在噪声尖峰的射频信号。
输入数据如下:
00000001111100011110001111100001110000001000001111000000111001111000
在解析信号数据之前,我需要删除尖峰位,这些位是连续长度小于3(在本例中)的0和1序列。
所以基本上我需要匹配0000000111110001111000111110000111000000(1)000001111000000111(00)1111000
。
匹配后,我将其替换为其前面的一个比特,因此干净的信号看起来像这样:
00000001111100011110001111100001110000000000001111000000111111111000
到目前为止,我使用两个不同的正则表达式实现了这一点:
self.re_one_spikes = re.compile("(?:[^1])(?P<spike>1{1,%d})(?=[^1])" % (self._SHORTEST_BIT_LEN - 1))
self.re_zero_spikes = re.compile("(?:[^0])(?P<spike>0{1,%d})(?=[^0])" % (self._SHORTEST_BIT_LEN - 1))
然后我遍历匹配项并替换。
我如何使用单个正则表达式实现这一点?并且我可以使用正则表达式替换不同大小的匹配项吗?
我尝试了以下代码,但没有成功:
re.compile("(?![\1])([01]{1,2})(?![\1])")
00000110011001100111111
,应该替换什么? - tobias_k'00000000000111111111111'
:P - Joran Beasley