如何批量去掉文本的括号前后缀内容

发布时间 2023-12-29 17:17:56作者: NewJune

  静下心想想,日常的工作中,你们有没有遇到过这样的场景:ERP系统中的客户名称是按照项目、工程来命名的,我们应该如何通过这样的客户名称来提取得到真正的公司名称?

这里,我用AIGC随机生成了一些样本。

1. (海生项目)卓越光电科技有限公司
2. (蓝海贸易项目)天翼有限公司
3. 鸿图科技(武汉)有限公司
4. (生态农业项目)绿源农业发展有限公司
5. 天合化工(长沙)有限公司
6. (智慧城市项目)城网科技有限公司
7. (未来能源项目)光明新能源科技有限公司
8. 龙腾(西安)重工有限公司
9. (健康医疗项目)(智慧医疗项目)康宁生物科技有限公司
10. (国际物流项目)海运达物流有限公司

  仔细分析上面的样本,它其实涉及到以下几个技术问题:

  • 括号可能包含全半角符号,都要可以替换;
  • 括号可能在中间,属于公司名称的一部分,这类括号包括里面的内容不应该去除;
  • 文本可能在前缀和后缀都分别有括号,都需要能够去除。
  • 前缀括号有可能不止一组,需要能反复去除,直到获取到真实的公司名称。

  面对这些问题,作为程序员,首先想到的就是正则表达式,快速匹配到前后缀括号的内容,然后替换为空文本。再利用循环,一遍遍地把替换后的文本重新去查找前后缀,直至文本的第一个字符以及最后一个字符都不再是括号。

另外,我们还需要编写一个方法,可以快速将全角符号转换为半角符号。

下面是小爬用python语言做的具体功能实现,各位童鞋不妨参考下思路:

文本批量全角转半角

def Q2B(uchar):
    """单个字符 全角转半角"""
    inside_code = ord(uchar)
    if inside_code == 0x3000:
        inside_code = 0x0020
    else:
        inside_code -= 0xfee0
    if inside_code < 0x0020 or inside_code > 0x7e: #转完之后不是半角字符返回原来的字符
        return uchar
    return chr(inside_code)

def stringQ2B(ustring):
    """把字符串全角转半角"""
    return "".join([Q2B(uchar) for uchar in ustring])

 

文本批量去除括号前后缀(保留中间的括号)

 

def remove_outer_parentheses(text):
    # 使用一个正则表达式反复去除开头的括号和其内容
    while True:
        new_text = re.sub(r'^\([^()]*\)', '', text)
        if new_text == text:  # 如果没有更多匹配到开头的括号,跳出循环
            break
        text = new_text
    
    # 使用一个正则表达式反复去除结尾的括号和其内容
    while True:
        new_text = re.sub(r'\([^()]*\)$', '', text)
        if new_text == text:  # 如果没有更多匹配到结尾的括号,跳出循环
            break
        text = new_text
    
    return text

 

大胆验证一下代码的可靠性,结果如下:

 

  AI时代了,作为新时代码农,不要再局限于只能判断两个文本是否严格相等了。下次碰到业务端这类需求,给文本稍微加点前后缀,我们还要能用程序准确判断,它还是那个它!

答应我,马上迈入激动人心的2024年了,挑战下自己,好吗?

快来关注本公众号 获取更多爬虫、数据分析的知识!