regex - 正则表达式:在第二个制表符出现之前返回一行中的所有内容
问题描述
我有一个语料库文件,其中包含以下格式的数据:
Hi. bonjour. CC-BY 2.0 (France) Attribution: tatoeba.org #538123 (CM) & #629296 (Samer)
black! noir! CC-BY 2.0 (France) Attribution: tatoeba.org #906328 (papabear) & #1245450 (saeb)
基本上用 \teg 分成三个字段:
嗨\t bonjour \t CC-BY 2.0(法国)署名:tatoeba.org #538123 (CM) & #629296 (Samer)
我试图只获取键:值:
Hi. bonjour.
black! noir!
并避免接下来发生的一切。这就是我在 key:value 之后添加额外元数据之前的做法:
def load_doc(filename):
with codecs.open(filename, "r+", "utf-8") as file:
file = file.read()
return file
def to_pairs(doc):
lines = doc.strip().split('\n')
pairs = [line.split('\t') for line in lines]
return pairs
pairs = to_pairs(load_doc(filename))
谢谢你的帮助!
解决方案
这是完成这项工作的一种方法:
import re
lines = [
'Hi.\tbonjour.\tCC-BY 2.0 (France) Attribution: tatoeba.org #538123 (CM) & #629296 (Samer)',
'black!\tnoir!\tCC-BY 2.0 (France) Attribution: tatoeba.org #906328 (papabear) & #1245450 (saeb)',
]
for line in lines:
pairs = re.search(r'^(.+?)\t(.+?)(?=\t)', line)
print(pairs.groups())
#added parentheses to built-in method 'print' OP Python v3+
输出:
('Hi.', 'bonjour.')
('black!', 'noir!')
推荐阅读
- python - 如何过滤 JSON 数据?
- python-3.x - 微调预训练的 InceptionResnetV2
- java - “mvn clean install”和“mvn clean verify install”有什么区别?
- java - Java Spring:如何使用@RequestBody POST JSON 对象
- bash - 如何在case语句中分配和使用变量中的多个值?
- google-apps-script - 如何将谷歌电子表格连接到我的 MariaDB?
- c++ - 多个但唯一的类继承
- codeship - 根据更改的文件在单个 repo 中选择 codeship 步骤
- c# - 子项不继承 ASP.Net MenuItem 格式
- android - React-native:是否可以更改键盘