如何用Regex提取含相同senID且结尾为波斯问号的多行内容?
提取符合条件的语料段落方法
可以用以下两种常用方法实现你的需求:
使用awk命令行工具
awk是处理文本的高效工具,适合快速批量处理语料。编写如下脚本(保存为filter.awk):
BEGIN { RS = "" } /؟ senID=/ { print }
用法
将你的语料保存为corpus.txt,在终端执行命令:
awk -f filter.awk corpus.txt
原理:通过RS = ""设置空行为段落分隔符,让awk把每个senID对应的内容当作单个记录;匹配包含؟ senID=的记录(即最后一行带波斯问号的段落)并输出。
使用Python脚本
如果需要更定制化的处理逻辑,用Python脚本实现:
def extract_target_segments(file_path): with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 按空行分割成独立的senID段落 segments = content.split('\n\n') target_segments = [] for seg in segments: seg_lines = seg.strip().split('\n') # 检查段落最后一行是否以波斯问号结尾 if seg_lines and seg_lines[-1].strip().endswith('؟'): target_segments.append(seg) return '\n\n'.join(target_segments) # 执行并输出结果 if __name__ == "__main__": result = extract_target_segments('corpus.txt') print(result)
用法
把语料保存为corpus.txt,运行脚本即可得到所有符合条件的段落。
内容的提问来源于stack exchange,提问作者Saeid01
相关产品推荐
相关产品推荐

