相关疑难解决方法(0)

Python字符串模式识别/压缩

我可以做基本的正则表达式,但这有点不同,即我不知道模式是什么.

例如,我有一个类似字符串的列表:

lst = ['asometxt0moretxt', 'bsometxt1moretxt', 'aasometxt10moretxt', 'zzsometxt999moretxt']
Run Code Online (Sandbox Code Playgroud)

在这种情况下,常见模式是两段常见文本:'sometxt'并且'moretxt',由长度可变的其他内容开始和分隔.

公共字符串和变量字符串当然可以在任何顺序和任何数量的场合发生.

将字符串列表压缩/压缩为公共部分和个别变体的好方法是什么?

示例输出可能是:

c = ['sometxt', 'moretxt']

v = [('a','0'), ('b','1'), ('aa','10'), ('zz','999')]
Run Code Online (Sandbox Code Playgroud)

python compression string pattern-recognition

7
推荐指数
2
解决办法
5246
查看次数

自动构建适合字符串集的正则表达式

我们编写了系统来分析来自大型网络的日志消息.系统从许多不同的网络元素中获取日志消息,并通过正则表达式进行分析.例如,用户可能已经编写了两条规则:

^cron/script\.sh.*
.*script\.sh [0-9]+$
Run Code Online (Sandbox Code Playgroud)

在这种情况下,只会选择与给定模式匹配的日志.过滤的原因是可能存在大量日志消息,每天最多1 GB.

现在是我问题的主要部分.因为有很多网络元素,以及它们的几种类型,并且它们中的每一个在路径中都有不同的参数...有没有办法自动生成一组以某种方式对日志进行分组的正则表达式?系统可以学习历史数据,例如从上周开始.生成的正则表达式必须非常准确,它应该是用户将这种新规则添加到系统中的提示.

我正在考虑无监督机器学习将输入分成组,然后在每组中找到正确的正则表达式.还有其他方式,可能更快或更好吗?并且,最后但并非最不重要的,如何找到匹配所有组中的所有字符串的正则表达式?(非平凡,所以.*不是答案.)


编辑经过一番思考后,我会尝试简化问题.假设我已经分组了日志.我想(最多)找到集合中所有字符串共有的三个最大子串(至少一个).例如:

Set of strings:
cron/script1.sh -abc 1243 all
cron/script2.sh 1
bin/script1.sh -asdf 15

Obtained groups:
/script
.sh 
Run Code Online (Sandbox Code Playgroud)

现在我可以通过将这些组连接起来构建一些简单的正则表达式.*?.在这个例子中它将是.*?(/script).*?(\.sh ).*?.这似乎是更简单的解决方案.

regex string algorithm

5
推荐指数
2
解决办法
2647
查看次数