不用正则表达式来查找文本模式
发布时间:2020-12-14 06:14:49 所属栏目:百科 来源:网络整理
导读:# 假设你希望在字符串中查找电话号码, # 你知道模式:3个数字,一个短横线,3个数字,一个短横线,再加4个数字;例如:415-555-4242 # 假定,我们用一个名为isPhoneNumer()的函数,来检查字符串是否匹配模式,它返回false或者true,如下代码演示:def isPho
# 假设你希望在字符串中查找电话号码, # 你知道模式:3个数字,一个短横线,3个数字,一个短横线,再加4个数字;例如:415-555-4242 # 假定,我们用一个名为isPhoneNumer()的函数,来检查字符串是否匹配模式,它返回false或者true,如下代码演示:def isPhoneNumber(text): if len(text) != 12: return False for i in range(0,3): if not text[i].isdecimal(): return False if text[3] != ‘-‘: return False for i in range(4,7): if not text[i].isdecimal(): return False if text[7] != ‘-‘: return False for i in range(8,12): if not text[i].isdecimal(): return False return True# print(‘415-555-4242 is a phone number:‘)# print(isPhoneNumber(‘415-555-4242‘))# print(‘Moshi moshi is a phone number:‘)# print(isPhoneNumber(‘Moshi moshi‘))## 检测步骤:# 1 代码首先检查该字符串是否刚好有12个字符# 2 检查区号,就是text中的前3个字符,是否只包含数字# 3 函数剩下的部分检查该字符串是否符合电话号码的模式:号码必须在区号后出现第一个短横线# 4 3个数字# 5 另一个短横线# 6 最后是4个数字# 如果程序执行通过了所有的检查,就返回True## 用参数‘415-555-4242‘调用isPhoneNumber()将返回真(True)# 用参数‘Moshi moshi‘调用isPhoneNumber()将返回假(False)# 第一项测试失败了,因为不是12个字符## 必须添加更多代码,才能在更长的字符串中寻找这个文本模式。用下面的代码,替代 isPhoneNumber.py中4个print()函数调用message = ‘Call me at 415-555-1011 tomorrow. 415-555-9999 is my office.‘for i in range(len(message)): chunk = message[i:i+12] if isPhoneNumber(chunk): print(‘Phone number found:‘+chunk)print(‘Done‘) 在for循环的每一次迭代中,取自message的一段新的12个字符被赋给变量chunk。 例如,在第一次迭代中,i是0,chunk被赋值为message[0:12](即字符串‘Call me at 4‘). 在下一次迭代中,i是1,chunk被赋值为message[1:13](字符串‘all me at 41‘). 将chunk传递给isPhoneNumber(),看看它是否符合电话号码的模式。如果符合,就打印出这段文本。 继续遍历message,最终chunk中的12个字符会是一个电话号码。该循环遍历了整个字符串,测试了每一段12个字符,打印出所有满足isPhoneNumber()的chunk。 当我们遍历完message,就打印出Done。 在这个例子中,虽然message中的字符串很短,但它也可能包含上百万个字符,程序运行仍然不需要一秒钟。使用正则表达式查找电话号码的类似程序,运行也不会超过一秒钟, 但使用正则表达式编写这类程序会快的多。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |