正则表达式可以帮我们,对给定输入的数据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)