加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

不用正则表达式来查找文本模式

发布时间: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中的字符串很短,但它也可能包含上百万个字符,程序运行仍然不需要一秒钟。使用正则表达式查找电话号码的类似程序,运行也不会超过一秒钟,  但使用正则表达式编写这类程序会快的多。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读