如何在Python中使用正则表达式分割文本?附文本样本
在Python中使用正则表达式分割文本的实用方法
嘿,这就来教你在Python里用正则表达式分割文本,结合你给的那段议会发言文本,我给你几个实用的场景和例子!
首先,Python里处理正则的核心模块是re,分割文本主要用re.split()函数,下面一步步来:
1. 基础分割:拆分说话人与发言内容
你的文本里有特里施勒博士(FDP):女士们,先生们!这样的结构,想把说话人和发言内容分开,直接按冒号:分割就行,记得限制分割次数避免内容里的标点干扰:
import re # 你的样本文本 text = "特里施勒博士(FDP):女士们,先生们!首先,作为议会中的难民代表之一,我想表达我的喜悦——所有党派均提出了缓解难民困境的提案,政府与反对派似乎一致认为这是一个共性问题,我们必须携手合作。因为我知道,……" # 只分割1次,确保说话人和内容不被拆分过度 split_result = re.split(r':', text, maxsplit=1) speaker = split_result[0].strip() speech_content = split_result[1].strip() print(f"说话人:{speaker}") print(f"发言内容:{speech_content}")
2. 按句子分割:处理中文标点
如果想把整段发言拆成单个句子,针对中文里的句号、感叹号、省略号,用字符集匹配就能实现:
# 匹配中文句子结尾的标点:。!…… sentences = re.split(r'[。!……]', text) # 过滤分割后产生的空字符串,让结果更干净 clean_sentences = [s.strip() for s in sentences if s.strip()] for idx, sentence in enumerate(clean_sentences, 1): print(f"第{idx}句:{sentence}")
3. 进阶:分割多说话人的发言
如果你的完整文本里有多个议员发言(格式类似XX(党派):内容),可以用正向断言精准分割,还不会丢失说话人标识:
# 假设完整文本包含多个说话人 multi_speaker_text = "特里施勒博士(FDP):女士们,先生们!…… 穆勒议员(CDU):我完全同意特里施勒博士的观点,我们需要跨党派协作……" # 用后发断言匹配"):"作为分割点,保留分割符在片段中 speech_segments = re.split(r'(?<=[)]:)', multi_speaker_text) # 整理每个说话人的内容 for segment in speech_segments: if segment.strip(): speaker_info, content = re.split(r':', segment.strip(), maxsplit=1) print(f"【{speaker_info}】:{content}")
这里的(?<=[)]:)是正则的后发断言,意思是“匹配前面是):的位置”,这样分割后每个片段都会保留说话人的标识,不会被切掉。
几个实用小技巧
- 正则里的英文特殊字符(比如
())需要加反斜杠转义,但中文括号不需要 - 用
maxsplit参数限制分割次数,避免内容里的相同符号干扰拆分 - 分割后记得用
strip()去掉多余的空格和换行符 - 如果要更精准匹配说话人格式,可以用
r'[\u4e00-\u9fa5]+([A-Z]+):'来匹配“中文人名+(大写党派缩写)+冒号”的结构
内容的提问来源于stack exchange,提问作者madik_atma
相关产品推荐
相关产品推荐

