Использование регулярных выражений в исходном тексте Python

Я пытаюсь создать скрипт, который позволит пользователю вводить ряд регулярных выражений, которые будут проходить через входной файл и получать совпадения. В настоящее время я использую ahocorasick, но у меня возникают проблемы, когда я пытаюсь ввести регулярные выражения.

Я ввожу регулярное выражение во второй raw_input (colour_regex), но получаю эту ошибку ниже:

Traceback (most recent call last):
  File "PLA_Enrichment_options.py", line 189, in <module>
    main()
  File "PLA_Enrichment_options.py", line 41, in main
    tree.add(regex)
  File "build/bdist.linux-x86_64/egg/ahocorasick/__init__.py", line 29, in add

TypeError: argument 1 must be string or read-only buffer, not _sre.SRE_Pattern

file_name = raw_input("What is the filename you wish to enhance? ")
enhanced_name = file_name.replace(".csv", "")

# User regexed input
tree = ahocorasick.KeywordTree()
print ("What regex would you like to use for colour? (Enter 'exit' to move on) ")
colour_regex = raw_input()
regex = re.compile(colour_regex)
while colour_regex != "exit":
    tree.add(regex)
tree.make()

print 'Finding colour matches...'
output = open(enhanced_name + '-colour.csv', 'w')
file = open(feed_name, 'r')
for line in iter(file):
    id, title, desc, link, image = line.strip('\n').split('\t')
    offerString = '|'.join([title.lower(), desc.lower(), link.lower()])
    keywords = set()
    for match in tree.findall_long(offerString): # find colours
        indices = list(match)
        keyword = offerString[indices[0]:indices[1]]
        if re.search(r'(?<![âêîôûäëïöüàèìòùáéíóú])\b%s\b(?![âêîôûäëïöüàèìòùáéíóú])' %(keyword), offerString):
            keywords.add(keyword)                                     
    if keywords:
        output.write('\t'.join([id, '|'.join(keywords), desc, link, image])+'\n')
    else:
        output.write('\t'.join([id, title, desc, link, image])+'\n')
file.close()
output.close()

Любая помощь / руководство в правильном направлении было бы здорово.

Спасибо

1 ответ

tree = ahocorasick.KeywordTree()
regex = re.compile(colour_regex)
tree.add(regex)

Вы передали неправильный тип ahocorasick.KeywordTree.add()

regex является скомпилированным объектом регулярного выражения. Тип является _sre.SRE_Pattern, Если вместо этого вы используете исходную строку, вы не получите эту ошибку.

tree.add(colour_regex)

Кроме того, это вызовет бесконечный цикл. Я думаю ты хочешь if вместо whileили положить colour_regex = raw_input() внутри петли.

while colour_regex != "exit":
Другие вопросы по тегам