gpt4 book ai didi

python - 用于消除位信号噪声尖峰的正则表达式

转载 作者:太空狗 更新时间:2023-10-30 00:54:14 24 4
gpt4 key购买 nike

我正在处理有时带有噪声尖峰的 RF 信号。
输入是这样的:
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])")

最佳答案

import re
THRESHOLD=3

def fixer(match):
ones = match.group(0)
if len(ones) < THRESHOLD: return "0"*len(ones)
return ones

my_string = '00000001111100011110001111100001110000001000001111000000111001111000'
print(re.sub("(1+)",fixer,my_string))

如果你还想删除零的“尖峰”

def fixer(match):
items = match.group(0)
if len(items) < THRESHOLD: return "10"[int(items[0])]*len(items)
return items

print(re.sub("(1+)|(0+)",fixer,my_string))

关于python - 用于消除位信号噪声尖峰的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39519207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com