静下心想想,日常的工作中,你们有没有遇到过这样的场景: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年了,挑战下自己,好吗?
快来关注本公众号 获取更多爬虫、数据分析的知识!
标签:code,后缀,text,inside,括号,文本 From: https://www.cnblogs.com/new-june/p/17935327.html