@H_404_1@
# 假设你希望在字符串中查找电话号码, # 你知道模式: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中的字符串很短,但它也可能包含上百万个字符,程序运行仍然不需要一秒钟。使用正则表达式查找电话号码的类似程序,运行也不会超过一秒钟, 但使用正则表达式编写这类程序会快的多。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。