Найти - Пользователи
Полная версия: регулярные выражения
Начало » Центр помощи » регулярные выражения
1
Kato
Всем доброго времени суток!
Недавно начали проходить регулярные выражения, задали написать программу, которая распечатывала бы все формы глагола. Не могли бы вы подсказать, как короче\разумнее записать вот это(формы глагола “сидеть”):
p = re.search(u'^си(д|ж)(ел(а|о|и)|и(м|т(е|ь?ся)|ят|шь)(я(щ(ий|ая|е(му|го))|евш(ий|его|ему|им|ем|ие|их|им(и)$)
не совсем понял, где тут можно использовать . и
Заранее благодарен за объяснения.
py.user.next
вообще, если прямо так и надо записывать, то есть многословная форма регулярного выражения, в которой можно комментарии писать

а вообще, нужно составить грамматику, а потом пользоваться ей как схемой
Kato
Не могли бы Вы, пожалуйста, еще просмотреть вот это? задача в том, чтобы программа искала данные слова и выдавала, чего в тексте больше- данного слова мужского рода либо во множественном числе.
import codecs, re
words = []
m = 0
pl = 0
f = codecs.open(u'text.txt','r','utf-8')
for line in f:
    for word in line.split():
        word = word.lower()
        word = word.strip(u'.,:;-()?!')
        words.append(word)
f.close
for i in range(len(words)):
    m = re.search(u'как(о(й|го|му|е))|(ая|ую)|и(е|х|[ми]*)',words[i])
    if m != None:
        if m == m.group(2):
            m += 1
        if m == m.group(3):
            pl += 1
if f > pl:
    print 'muzhskogo roda > '
else:
    print 'mnozhestvennogo chisla > '
py.user.next
Kato
if m == m.group(2):
неправильно, объект-совпадение сравнивается с объектом-строкой

>>> import re
>>> m = re.search(r'.(.)', 'abc')
>>> m
<_sre.SRE_Match object at 0xb77e6120>
>>> m.group(1)
'b'
>>> type(m)
<type '_sre.SRE_Match'>
>>> type(m.group(1))
<type 'str'>
>>>

Kato
if f > pl:
объект-файл сравнивается с объектом-числом

>>> f = open('/etc/passwd')
>>> n = 0
>>> f
<open file '/etc/passwd', mode 'r' at 0xb788ade0>
>>> n
0
>>> type(f)
<type 'file'>
>>> type(n)
<type 'int'>
>>>

из-за синтаксической ошибки в регулярном выражении вместо слова “каких” будет искаться слово “ая”
третья группа якобы совпадает со множественным числом

логически программа тоже неправильно построена:
“какое” считается мужским родом
“какой” может быть не только мужского, но и женского рода
“какиии” считается валидным словом множественного числа
zheromo
используйте например стеммер Постера
Kato
спасибо!

если не сложно, не могли бы вы взглянуть на такое вот задание:
нужно открыть html страницу из вики (посвященную какому-либо языку) и записать оттуда языковой код этого языка ( он там в таблице после ISO/DIS 639-2 указан). получилось что-то типа
import codecs, re
f = codecs.open(u'nya.html', 'r', 'utf-8-sig')
html = f.read()
f.close()
m = re.search(u'639-2</a>:</td><td style="background-color:white">(.{3})</td>', html)
if m != None:
    codes = codecs.open('ya.txt','w','utf-8')
    codes.write(m.groups(1))
    f.close()
    print m.group(1)

Не подскажете, из за чего она может не работать?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB