2013-07-11 2 views
4

Я пытался сопоставить всю строку, содержащую одно слово на любом языке. Мой поиск привел меня к \ p {...}, который отсутствовал в модуле Re python. Но я нашел https://pypi.python.org/pypi/regex. Он должен работать с командами \ p {...}. Хотя это не так.Как реализовать p {L} в python regex

Я попытался разбором этих строк:

7652167371 apéritif 
78687 attaché 
78687 époque 
78678 kunngjøre 
78678 ærbødig 
7687 vår 
12312 dfsdf 
23123 322432 
1321 23123 
2312 привер 
32211 оипвыола 

С:

def Pattern_compile(pattern_array): 
    regexes = [regex.compile(p) for p in pattern_array] 
    return regexes 

def main(): 
    for line in sys.stdin: 
     for regexp in Pattern_compile(p_a): 
      if regexp.search (line): 
       print line.strip('\n') 

if __name__ == '__main__': 
    p_a = ['^\d+\t(\p{L}|\p{M})+$', ] 
    main() 

Результатом только латиницей слово:

12312 dfsdf 
+0

С быстрым взглядом вы не передаете свой параметр регулярного выражения в основную функцию. Попробуйте def main (p_a): и в последней строке main (p_a) – lucasg

+0

Но если p_a пуст, все должно совпадать - так как все соответствует пустому регулярному выражению. – FrankieTheKneeMan

+0

Обычно я использую re2 у Google, он более мощный, хотя я не знаю, покрывает ли он то, что вам нужно. [Re2] (https://pypi.python.org/pypi/re2/) – PepperoniPizza

ответ

2

Вы должны пройти Юникод. (Как регулярное выражение, так и строка)

import sys 

import regex 


def main(patterns): 
    patterns = [regex.compile(p) for p in patterns] 
    for line in sys.stdin: 
     line = line.decode('utf8') 
     for regexp in patterns: 
      if regexp.search (line): 
       print line.strip('\n') 

if __name__ == '__main__': 
    main([ur'^\d+\t(\p{L}|\p{M})+$', ]) 
+0

Спасибо. Это действительно помогло. Я всегда писал только r "" в regex раньше. И я думаю, я всегда должен проверять с расшифровкой («utf-8»), потому что это часто проблема. Хотя мне пришлось использовать line1 = line.decode ('utf8'), иначе UnicodeEncodeError был брошен. – antonavy

Смежные вопросы