如何使用regex组读取cedict(一个空格分隔的文件)?

2024-10-02 22:26:36 发布

您现在位置:Python中文网/ 问答频道 /正文

{a1}是用于分析的中文文本

文件纯文本文件如下所示:

# CC-CEDICT
# Community maintained free Chinese-English dictionary.
# 
# Published by MDBG
% % [pa1] /percent (Tw)/
21三體綜合症 21三体综合症 [er4 shi2 yi1 san1 ti3 zong1 he2 zheng4] /trisomy/Down's syndrome/
3C 3C [san1 C] /abbr. for computers, communications, and consumer electronics/China Compulsory Certificate (CCC)/
3P 3P [san1 P] /(slang) threesome/
A A [A] /(slang) (Tw) to steal/

文件有4列,用空格隔开。第四个空格之后的任何空格都被认为是一个。需要跳过以#开头的行。在

例如,对于生产线:

3C 3C [san1 C] /abbr. for computers, communications, and consumer electronics/China Compulsory Certificate (CCC)/

列中的内容将是

  • 3摄氏度
  • 3摄氏度
  • [三合一]
  • /计算机、通信和消费电子产品缩写/中国强制认证(CCC)/

目前,我尝试使用str.splitre.findall混合使用str.startswith()跳过行,即:

^{pr2}$

看起来str和regex操作可以类似于单个regex,并且可以使用组提取列。如何使用regex组读取cedict(一个空格分隔的文件)?


我还尝试了4组正则表达式:

(.*)\s(.*)\s(\[([^]]*)\])\s(\/.*\/)

但不知何故,第一个(.*)\s是贪婪的,它捕获了整行:https://regex101.com/r/1c0O0E/1


我试过了:

.+\s(\[([^]]*)\])\s(\/.*\/)

第一个.+\s捕获直到它看到[。但这意味着我必须使用str.split()来获取前2列。在


Tags: and文件forconsumerregextw空格ccc
1条回答
网友
1楼 · 发布于 2024-10-02 22:26:36

使用“non-space”(\S)而不仅仅是“anything”(.):

^(\S+)\s+(\S+)\s+(\[[^]]+\])\s+(\/.*\/)$

我还添加了文本开头和测试结束锚(^&;$)以排除与所需模式不匹配的任何行(例如注释行)。在

演示:https://regex101.com/r/0QNzVi/3

相关问题 更多 >