正则表达式可以帮我们,对给定输入的数据input_data,设定一定的规律pattern,输出干净结果output_data的工具。

但对于小白而言,很多时候,我们知道 input_data 和 output_data, 但不知道如何设计 表达式pattern,毕竟即使是计算机专业的学生,如果不系统钻研,都不一定会快速上手,更遑论我们文科生小白。chatGPT 是一种具有极强学习和推理能力的工具, 我们需要先研究数据中的规律,抽象出能实现目的的 input_data 和 output_data, 丢给chatGPT帮我们设计

接下来的人机对话中,input_data 和 output 为视频课程《Python实证指标构建与文本分析》正则表达式章节的实验数据。实验下来, 比通过谷歌百度搜效率高多了,准确率也不错。


问题1-提取个人信息

deng:

我正在学习Python正则表达式,将给出实验文本数据input_data,以及我想从中抽取出的内容output_data。请帮我设计对应的正则表达式。

input_text = ['大家好,我叫张三,来自河北,今年30岁。',                      
              '大家好,我叫李四,来自山东,今年25岁。',                     
              '大家好,我叫王五,来自内蒙古,今年22岁。'] 


output = [('张三', '河北', '30'), 
          ('李四', '山东', '25'), 
          ('王五', '内蒙古', '22')] 

chatGPT:

下面是匹配上述input_data和output_data的正则表达式:

import re

input_data = ['大家好,我叫张三,来自河北,今年30岁。', 
              '大家好,我叫李四,来自山东,今年25岁。',
              '大家好,我叫王五,来自内蒙古,今年22岁。']

output_data = []
for text in input_text:
    
    res = re.findall(r'我叫(.*),来自(.*),今年(.*)岁', text)
    output_data.append(tuple(res[0]))
    
print(output_data)

这段代码将使用正则表达式 r"我叫(.*),来自(.*),今年(\d+)岁" 匹配 input_data 中的内容,并将每一行的匹配结果存储在 output_data 列表中。


问题2-提取出数据中的年份。

deng:

intput_data = """Python是一门面向对象的编程语言,诞生于1991年22。目前以广泛应用在网站开发、游戏软件开发、数据采集、机器学习等多个领域。一般情况下Python是Java的20%,所以说人生苦短,我用Python。"""

output_data = ['1991']

chatGPT:

import re 
intput_data = """Python是一门面向对象的编程语言,诞生于1991年22。目前以广泛应用在网站开发、游戏软件开发、数据采集、机器学习等多个领域。一般情况下Python是Java的20%,所以说人生苦短,我用Python。""" 
output_data = re.findall(r'\b\d{4}\b', intput_data)
print(output_data)

问题3-re.split分割句子

deng:

用re.split 分割 input_data ,生成output_data, 设计刚刚的正则表达式。

intput_data = """Python是一门面向对象的编程语言,诞生于1991年22。目前以广泛应用在网站开发、游戏软件开发、数据采集、机器学习等多个领域。一般情况下Python是Java的20%,所以说人生苦短,我用Python。"""

output_data = ['Python是一门面向对象的编程语言', 
               '诞生于1991年', 
               '\n目前以广泛应用在网站开发、游戏软件开发、数据采集、机器学习等多个领域', 
               '一般情况下Python是Java的20%']

chatGPT:

import re

input_data = """Python是一门面向对象的编程语言,诞生于1991年22。目前以广泛应用在网站开发、游戏软件开发、数据采集、机器学习等多个领域。一般情况下Python是Java的20%,所以说人生苦短,我用Python。"""

output_data = re.split(r'[。,]', input_data)
output_data = [i + '。' for i in output_data if i]

print(output_data)

问题4-re.sub替换数字为NUM

deng:

使用正则表达式 re.sub 实现从input_data到output_data的转换。

input_data = """Python是一门面向对象的编程语言,诞生于1991年。\
一般情况下Python代码量是Java的20%,所以说人生苦短,我用Python。"""

output_data = 'Python是一门面向对象的编程语言,诞生于NUM年。一般情况下Python代码量是Java的NUM%,所以说人生苦短,我用Python。'

chatGPT

您可以使用正则表达式 re.sub 来实现将所有数字替换为 ‘NUM’ 的转换:

import re

input_data = """Python是一门面向对象的编程语言,诞生于1991年。\
一般情况下Python代码量是Java的20%,所以说人生苦短,我用Python。"""

output_data = re.sub(r'\d+', 'NUM', input_data)
print(output_data)


广而告之