题目分为几个类似的,以免每次都单独创建。字符串中使用的字符:所有数字、英文字母的所有小写和大写字母。查看线路:
a22tbf645
92STbfF4W
92rtRe7Ev
gyue73Pr4
u8t9D03gE
a2t4TA6Kk
Lj3D2Jrs1
同时应用以下所有内容后所需的响应:Lj3D2Jrs1
1.a 删除在任何位置包含三个或更多不同连续数字的行。
1.b 删除在任何位置连续包含三个或更多小写字母的行。
1.c 删除在任何位置连续包含三个或更多任何大写字母的行。
2.a 删除在任何位置包含四个或更多任何数字的行。
2.b 删除在任何位置包含四个或更多小写字母的行。
2.c 删除包含四个或更多大写字母的行。
- 删除在不同情况下任意位置包含相同字母的字符串,例如
aAAa
是否可以将所有这些条件组合成一个命令?最好是 sed, awk, grep, tr, cut, perl, python, 也许是其他东西 - 强调处理速度 - 大数组。(顺便说一下,更快?)谢谢
这是一个(可能)效率低下且坦率地说很愚蠢,但适用于经典正则表达式的版本:
Python 版本基于 CO 的答案。
例如,我们从 100M 的随机样本中创建一个文件,该文件具有来自问题的给定模式:
[a-zA-Z0-9]{9}机器特点:
仅在没有条件 3 的正则表达式上更正版本
Rust 中的方法,工作速度快 15 倍:
测试
链接
使用简单状态机(确定性有限状态机)的解决方案是用Delphi正面写的,然后我尽我所能,几乎直接翻译成Python,所以代码很麻烦,显然不是pythonic,性能可能会受到影响因为我不使用一些内置的东西,也不知道是什么影响了 Python 的性能。例如,当我将字符突出显示替换为时,时间从 41 秒变为 33 秒
在
对于属于指定集合的 1000 万行 9 个随机字符(110 兆字节)的文件,在 Celeron 2.8 GHz 上的 Windows 下的本机 (Delphi) 代码大约需要 4-5 秒(从 HDD 加载数据和大约一秒钟来处理自己)。这段代码 (Python 3.6) 需要 33 秒的时间(其中 11 秒用于加载文件,如果您只是阅读所有行并且什么都不做)。
代码遍历每一行,计算大写字母、小写字母和数字的数量,如果任何计数器超过限制 (3)(条件 2),则中止行处理。
state- 这是当前状态,表示之前处理的符号类型。0 - 不确定,1 - 数字,2 - 大写,3 - 小写字母。如果
state不改变,则seriescount检查当前类型的字符序列的长度(条件1)如果它
state从 2 变为 3 或反之亦然,则检查前一个字符是否是不同寄存器中当前字符的副本(条件 3)。