Я пытаюсь создать сценарий, который позволит пользователю вводить ряд регулярных выражений, которые будут проходить через входной файл и получать совпадения. В настоящее время я использую ahocorasick, но у меня возникают проблемы, когда я пытаюсь вводить шаблоны с регулярным выражением.Использование регулярных выражений в исходном входе python
Я ввести регулярное выражение во второй 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()
Любая помощь/руководство в правильном направлении было бы здорово.
Благодаря
Какие у вас проблемы с этой программой? Где это происходит? –
Когда я вводил регулярное выражение при первом запросе на цвет, я получаю эту ошибку: TypeError: аргумент 1 должен быть строковым или только для чтения, а не _sre.SRE_Pattern – user2320229
. Пожалуйста, добавьте полное сообщение об ошибке (с номером строки) в вопрос. –