检查字符串是否匹配特定模式的最快方法是什么?正则表达式是最好的方法吗?
例如,我有一堆字符串,想要检查每个字符串以查看它们是否为有效的IP地址(在这种情况下为有效,表示正确的格式),使用regex最快的方法是吗?还是有更快的字符串格式化之类的东西。
到目前为止,我一直在做这样的事情:
for st in strs:
if re.match('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', st) != None:
print 'IP!'
更新 :最初的答案对2011年有效,但自2012年以来,使用Python的 ipaddress
stdlib模块
可能会更好-
除了检查IPv4和IPv6的IP有效性之外,它还可以做很多其他事情。 </update>
看来您正在尝试验证IP地址。正则表达式可能不是最好的工具。
如果您想接受所有有效的IP地址(包括您甚至可能都不知道的某些有效地址),则可以使用IPy
(源):
from IPy import IP
IP('127.0.0.1')
如果IP地址无效,它将引发异常。
或者您可以使用socket
(源):
import socket
try:
socket.inet_aton(addr)
# legal
except socket.error:
# Not legal
如果您确实只想将IPv4与4个小数部分匹配,则可以对点进行分割并测试每个部分是否为0到255之间的整数。
def validate_ip(s):
a = s.split('.')
if len(a) != 4:
return False
for x in a:
if not x.isdigit():
return False
i = int(x)
if i < 0 or i > 255:
return False
return True
请注意,您的正则表达式不会执行此额外检查。它将接受999.999.999.999
为有效地址。
如何检查字符串是否与此模式匹配? 大写字母,数字,大写字母,数字。。。 例如,这些将匹配: 这些不会(“^”表示问题)
问题内容: 我想使用JavaScript(可以与jQuery一起使用)进行一些客户端验证,以检查字符串是否与正则表达式匹配: 理想情况下,它将是一个返回true或false的表达式。 我是JavaScript新手,我需要做什么?似乎要检查字符串的一部分是否匹配正则表达式,而不是整个字符串。 问题答案: 使用,如果你想要的是一个布尔结果: …并且您可以从正则表达式中删除,因为您无需捕获。
问题内容: 我想检查一个字符串是否匹配以下格式: 字符串中不应有空格,破折号前仅2个数字,破折号后2个数字。 最好的方法是什么? 问题答案: 您可以使用: 如果您将要进行大量此类验证,请考虑预编译正则表达式: 然后,您可以使用。有关更多详细信息,请参见课程。
问题内容: 我正在使用Python v2,并且试图找出是否可以判断字符串中是否包含单词。 我发现了一些有关识别单词是否在字符串中的信息-使用.find,但是有一种方法可以执行IF语句。我想要以下内容: 谢谢你的帮助。 问题答案: 出什么问题了:
我有一个IP地址,我得到了另外两个IP地址,它们一起创建了一个IP范围。我想检查第一个IP地址是否在这个范围内。我怎么能在不使用循环的情况下在Python中找到它?
字符串格式应如下所示。它是一个逗号分隔的,应该有两个键access_token和client,每个键都应该有它的值,后面跟一个=(格式如下)。 如何编写一个高效的代码来检查给定的字符串是否与下面的模式匹配。 access_token=,client=