Python中,使用正则表达式时,遇到的re.error:unbalanced parenthesis问题记录

这里写自定义目录标题

前言

开始在CSDN写文章只是为了记录自己在学习中所遇到过的坑,以便之后再遇到时有法可查。
学习语言:Python
模块:正则表达式
代码:手机号验证(包含当前移动、联通、电信运营商目前的所有号段)
踩坑人:炽空羽
踩坑时间:2019.06.28
问题状态:已解决

正文

在学习Python正则表达式的过程中,按照视频学习敲打代码,却无法正常运行,满百度的找问题的解决方案,结果也只有在CSDN里发现一个和我有过同样问题的博主@tianbwin2995 的相关技术文章1,但是和我的情况不大相同。尝试过卸载、更新pycharm,更换编译器等操作,都以失败告终。

先粘贴出我有问题的代码:

// An highlighted block
import re

def checkCellphone(cellphone):
   reg = "^(13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$"
   # regex = "^((13[0-9])|147|(15([0-3]|[5-9])|(17[3,6,7,8])|(18[0-9])|(19[1,9]))\d{8}$"
   result = re.findall(reg, cellphone)
   if result:
       print("匹配成功")
       return True
   else:
       print("匹配失败")
       return False
if __name__ == "__main__":
   cellphone = 13509561674
   checkCellphone(cellphone)

咋一看好像没什么问题,目前能知道的就是小括号出了问题,因此,在技术群里的大佬指引下,找到了问题缘由:在正则表达式里多写了一个小括号,导致小括号不匹配。正确代码如下:

 // An highlighted block
import re
def checkCellphone(cellphone):
    #reg = "^(13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9])\d{8}$"
    reg = "^((13[0-9])|147|15([0-3]|[5-9])|(17[3,6,7,8])|(18[0-9])|(19[1,9]))\d{8}$"
    result = re.findall(reg, cellphone)
    if result:
        print("匹配成功")
        return True
    else:
        print("匹配失败")
        return False
if __name__ == "__main__":
    cellphone = "13109561674"
    checkCellphone(cellphone)
    ```

  1. 正则表达式re包报错unbalanced parenthesis无法处理小括号的情形 ↩︎

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
抱歉,我之前给出的正则表达式有一个错误。在正则表达式,括号需要进行转义,所以在你的模式的两个括号需要改为`\(`和`\)`。以下是修改后的代码: ```python import re html = ''' <html> <meta http-equiv="Content=-Type" content="text/html; charset=utf-8"/> <head> <link href="http://192.167.1.101/hint.css" rel="stylesheet"></link> </head> <body>[talkid:137031381]2014年4月20日 03:55:45 , <span class="hint-success" data-hint="">2323234</span> 在群 <span class="hint-success" data-hint="">20011</span> 发言 我们已经是dffwerwer天吧! [talkid:137031382]2014年4月22日 04:45:45 , <span class="hint-success" data-hint="">2323234</span> 在群 <span class="hint-success" data-hint="">20011</span> 发言 音频 :[<a href="files/24434sfsfsjdfrhf_n.m4a"]>音频</a> [talkid:137031383]2014年4月23日 04:55:45 , <span class="hint-success" data-hint="">2323234</span> 在群 <span class="hint-success" data-hint="">20011</span> 发言 图片 :[<a href="files/f/f123ftrtrhf_n.jpg"]>图片</a> [talkid:137031384]2014年4月24日 05:55:45 , <span class="hint-success" data-hint="">2323234</span> 在群 <span class="hint-success" data-hint="">20011</span> 发言 我们已方式方法方式 [talkid:137031385]2014年4月25日 06:55:45 , <span class="hint-success" data-hint="">2323234</span> 在群 <span class="hint-success" data-hint="">20011</span> 发言 我而对方是否的天吧! </body> </html> ''' pattern = r'\(发送|发言\)\s*(.*?).*?(音频 :|图片 :).*?(\[.*?\])' matches = re.findall(pattern, html, re.DOTALL) for match in matches: content = match[0] content_type = match[1] file_link = match[2] if content_type == '音频 :': print(f"音频链接地址: {file_link}") elif content_type == '图片 :': print(f"图片链接地址: {file_link}") else: print(f"发言字段: {content}") ``` 请尝试运行修改后的代码,并检查是否有任何错误。如果还有问题,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值