如何用Python正则表达式清理CSV中演员信息的括号内容及冗余项?
提取CSV中演员纯姓名的正则处理方案
问题场景
你的CSV文件actors列有如下内容:
Halley Bailey - 1998 Hayley Orrantia (1994-) American actress, singer, and songwriter Ken Watanabe (actor) etc...
需要仅保留演员姓名,移除括号及内部内容、逗号后冗余文本、姓名后的日期信息,最终输出:
Halley Bailey Hayley Orrantia Ken Watanabe
你之前尝试的代码regex = '|'.join(map(re.escape, df['actors']))只是将所有演员条目拼接成正则表达式,无法针对性处理各类冗余内容,下面是可行的扩展方案:
解决方案
使用Pandas的str.replace()结合正则表达式,分步骤(或合并)处理冗余内容:
分步处理代码
import pandas as pd # 读取目标CSV df = pd.read_csv("your_csv_file.csv") # 1. 移除括号及其内部所有内容(含前后空格) df["actors"] = df["actors"].str.replace(r"\s*\(.*?\)\s*", "", regex=True) # 2. 移除逗号及之后的所有文本 df["actors"] = df["actors"].str.replace(r",.*", "", regex=True) # 3. 移除姓名后的日期区段(格式为 "- 年份/日期范围") df["actors"] = df["actors"].str.replace(r"\s*-\s*\d+.*", "", regex=True) # 清理首尾多余空格 df["actors"] = df["actors"].str.strip() # 输出处理结果 print(df["actors"])
合并正则简化代码
也可以将多个正则规则合并为一次替换,减少代码行数:
import pandas as pd df = pd.read_csv("your_csv_file.csv") df["actors"] = df["actors"].str.replace(r"\s*\(.*?\)\s*|,.*|\s*-\s*\d+.*", "", regex=True).str.strip() print(df["actors"])
正则规则说明
\s*\(.*?\)\s*:匹配括号(前后可能带空格)及内部任意内容,非贪婪匹配.*?避免误匹配多个括号的情况,.*:匹配逗号及后续所有字符,直接截断\s*-\s*\d+.*:匹配姓名后带空格的-符号,以及后续以数字开头的日期相关内容
内容的提问来源于stack exchange,提问作者nic.o
相关产品推荐
相关产品推荐

