我有一个法国正则表达式,并且有重音符号。
我有一个打印的字典(不是pythonic数据结构):一个用大写写的单词列表,然后是定义。我想用所有大写单词分割我的20Mo字典。
当我有一个单词本身由不同的单词组成时,问题出现了:我需要按照大写字符的句点分割文本,有或没有空格。 此外,这些词语可以突出特色。
我花了一天时间试图让它成功,但找不到答案。
以下是一个例子:
# -*- coding: utf-8 -*-
import codecs
import re
import string
print "debut pgm"
import regex
dico = """ARRHEMENT. s. m. L'action d'arrher. Achat de grains en vert et sur pied. ARRHER.v. a. S'assurer de quelque chose en donnant des arrhes. Arrher des marchandises.
Arrhé, ée. participe. ARRHES. s. f. pl. L'argent qu'on donne pour assurance de l'exécution d'un marché, et que l'on perd si lemarché n'a pas lieu par la faute de celui qui les a données. Le marché est−il conclu? donnez des arrhes. Il s'est engagé, il a pris des arrhes. Donner des arrhes au coche. •On dit familièrement, qu'On a donné des arrhes au coche, pour faire entendre qu'On s'est engagé dans quelque affaire, dans quelque société. Je ne puis
A 201"""
pattern = r'(?u)\p{Lu}+(?: \p{Lu}+)*|\p{Ll}+'
matches = regex.findall(pattern, dico)
n =0
i = 0
definition = ""
mot = ''
while i < len(matches):
if matches[i].isupper() and len(matches[i])>1:
print definition
definition =""
word = matches[i]
print "[",word,"]"
else:
definition += matches[i] + " "
i = i + 1
结果给出了 首次亮相pgm
[ ARRHEMENT ]
s m L action d arrher A chat de grains en vert et sur pied
[ ARRHER ]
v a S assurer de quelque chose en donnant des arrhes A rrher des marchandises A rrh ? ? e participe
[ ARRHES ]
但是我想保留标点符号,(也是为了能够检测类型(我有类型的列表,如&#34; s。m。&#34;)
我确信这很简单,所以如果你能帮忙...... 谢谢, 罗曼。
答案 0 :(得分:3)
编辑:始终使用新的正则表达式模块,如果要将文本拆分为(单词,类型,定义),可以使用此模式:
# -*- coding: utf-8 -*-
import regex
data = u'''ARRHEMENT. s. m. L'action d'arrher. Achat de grains en vert et sur pied. ARRHER.v. a. S'assurer de quelque chose en donnant des arrhes. Arrher des marchandises. Arrhé, ée. participe. ARRHES. s. f. pl. L'argent qu'on donne pour assurance de l'exécution d'un marché, et que l'on perd si le marché n'a pas lieu par la faute de celui qui les a données. Le marché est−il conclu? donnez des arrhes. Il s'est engagé, il a pris des arrhes. Donner des arrhes au coche. •On dit'''
pattern = r'''(?usx)
(?<word> \b \p{Lu}+ (?> [ ] \p{Lu}+ )* )
\. [ ]?
(?<type> [a-z]{1,3} \. (?> [a-z]{1,3} \. )*)
[ ]
(?<def> .*? ) (?=(?1)\.|$)'''
matches = regex.findall(pattern, data)
print matches
老答案:
最简单的方法是使用new regex module代替re。此模块支持大写字母的字符类\p{Lu}
,小写字母的\p{Ll}
。它也支持unicode标志(?u)
(此修饰符的范围是全局的,不需要将其放在交替的每个部分上)。例如:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import regex
data = u'ARMÉ tu ARMÉE det PROPRÉTEUR def ÉTERNUER def À LA MALEHEURE test'
pattern = r'(?u)\p{Lu}+(?: \p{Lu}+)*|\p{Ll}+'
matches = regex.findall(pattern, data)
print matches