1

我有一个法语正则表达式,上面有重音。

我有一个印刷字典(不是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 ]

但我想保留标点符号,(也能够检测类型(我有像“sm”这样的类型列表)

我相信这非常简单,所以如果你能帮忙......谢谢,罗曼。

4

1 回答 1

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

旧答案:

最简单的是使用新的正则表达式模块而不是 re。该模块支持\p{Lu}大写字母、\p{Ll}小写字母的字符类。(?u)它也支持 unicode 标志(这个修饰符的范围是全局的,不需要把它放在交替的每个部分上)。例子:

#!/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
于 2014-08-02T19:36:45.077 回答