【发布时间】:2016-11-13 21:59:47
【问题描述】:
我的正则表达式功能完美:
def preprocess(topic, sample, RegSample):
topic = re.sub(RegSample,'?X?', topic, flags=re.I)# "" «» для агента X
topic = re.sub(sample, '?X?', topic, flags=re.I)# без скобок
topic = re.sub('[ЗАО]*[АО]О\s?X?', '?X? ', topic, flags=re.I)# ЗАО ОАО ООО и т.д. для X
topic = re.sub('\?X\?\?X\?', '?X?', topic)# Двойные агенты X
topic = re.sub('групп[^\s]\s?X?', '?X? ', topic, flags=re.I)# группа агента X
topic = re.sub('\s[a-zA-Z\s\d]*[\s\.$]', ' ?Y? ', topic) # Английские слова+цифры = Агент Y
topic = re.sub('[\"\«][^\"\»]*[\"\»]', '?Y?', topic, flags=re.I)# "" «» для агента Y
topic = re.sub('[ЗАО][ЗАО]О\s?Y?', '?Y?', topic)# ЗАО ОАО ООО и т.д. для Y
topic = re.sub('\s[А-Я][^\s]*[\s.$]', ' ?Y? ', topic)# Русские названия/имена заменяем на агента Y
topic = re.sub('\s[А-Я]\S*', '?Y?', topic)
topic = re.sub('\s[a-zA-Z][^\s]*', ' ?Y?', topic)
topic = re.sub('\?Y\?\?Y\?', '?Y?', topic)# Двойные агенты Y
topic = re.sub('[a-zA-Z\d\.-]*[\d][a-zA-Z\d\.-]*', '?D?', topic)# Английские наименования с цифрами(не компании)
topic = re.sub('[а-яА-Я\d\.-]*[\d][а-яА-Я\d\.-]*', '?D?', topic)# Российские наименования с цифрами(не компании)
return topic
但后来我需要更多正则表达式:
def final_preprocessing(topic):
topic = re.sub('?X?', 'лол', topic)# лол - слово, кодирующее компанию агент-которого рассматриваем
topic = re.sub('?Y?', 'кек', topic)# лол - слово, кодирующее всех остыльных компаний-агентов
topic = re.sub('?D?', 'd ', topic)# кодирует весь треш в ?D?
return topic
出现错误: error: nothing to repeat at position 0
根据一些现有的答案,即:Python regex strange behavior,我必须确保我的文本中有这些模式。我检查了一下,可以放心地说——它们在我的文字中。 那么现在有什么问题呢?
P.S. 其他正则表达式都可以返回零子字符串,但它们并没有以错误结束!
【问题讨论】:
-
这根本不是一个简单的正则表达式。