|
|
1
132
正则表达式只需很少的代码即可完成此任务:
|
|
|
2
25
[编辑]还有另一个解决方案尚未提及,在大多数情况下,它的性能似乎优于目前给出的其他解决方案。 使用string.translate替换字符串中的所有有效字符,并查看是否还剩下任何无效字符。这非常快,因为它使用底层的C函数来完成这项工作,只涉及很少的python字节码。 显然,性能并不是一切——当不是在性能关键的代码路径中时,寻找最具可读性的解决方案可能是最好的方法,但为了看看解决方案是如何叠加的,下面是迄今为止提出的所有方法的性能比较。check_trans是使用string.translate方法的。
我的系统上的结果是:
在大多数情况下,translate方法似乎是最好的,对于长有效字符串,效果非常显著,但在test_long_invalid中被正则表达式击败(可能是因为正则表达式可以立即退出,但translate始终必须扫描整个字符串)。集合方法通常是最差的,仅在空字符串情况下优于正则表达式。
在匹配所有有效字符和搜索无效字符的正则表达式方法之间有类似的区别。在检查长但完全有效的字符串时,匹配性能稍好一些,但在接近字符串末尾的无效字符时,匹配性能更差。 |
|
|
3
15
实现这一目标有多种方式,有些方式比其他方式更为明确。对于我的每个示例,“True”表示传递的字符串有效,“False”表示它包含无效字符。 首先,有一种天真的方法:
另一个解决方案指出,您可以使用正则表达式进行反向匹配,我已经在这里介绍了这一点。请注意,[^…]反转字符类,因为使用了^
您还可以对“set”对象执行一些棘手的操作。看一看这个例子,它从原始字符串中删除了所有允许的字符,留下一个集合,其中包含a)nothing,或b)字符串中有问题的字符:
|
|
5
4
作为使用正则表达式的替代方法,您可以在集合中执行:
|
|
|
6
3
|
|
|
7
2
所以你需要加上
|
|
|
8
0
你可以求助于regex,这里的伟人:) 代码:
输出:
希望这有帮助:) |
|
|
9
-1
您可以始终使用列表理解并使用all检查结果,这将比使用正则表达式少一点资源密集度:
|
|
|
10
-1
以下是基于Jerub的“幼稚方法”(幼稚是他的话,不是我的!)
如果
但是测试集合中是否存在应该更有效,或者至少不太依赖于允许的字符数。当然,这种方法在我的机器上要快一点。这很清楚,而且我认为它在大多数情况下都表现得足够好(在我的慢速机器上,我可以在几分之一秒内验证成千上万个短字符串)。我喜欢。 事实上 在我的机器上,regexp的计算速度快了好几倍,而且也和这个一样简单(可以说更简单)。因此,这可能是最好的前进方式。 |
|
|
11
-4
使用正则表达式,看看它是否匹配!
|
|
|
DotFX · RegEx捕获关键字前但括号后的所有内容 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |
|
|
iato · 确保正则表达式不从命名材料中的数字中提取 1 年前 |
|
|
vr8ce · 非成对标记中特定字符的正则表达式 1 年前 |
|
|
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 1 年前 |
|
|
Carsten · 使用最近的搜索模式更改文本块 1 年前 |