Использование регулярных выражений в исходном тексте 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":