应用简单正则表达式时出错

时间:2016-11-13 21:59:47

标签: python regex

我有一个RegExp功能完美的功能:

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

但是我需要更多的RegExp'

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。其他RegExp可能会返回ZERO子串,但它们并没有以错误结束!

1 个答案:

答案 0 :(得分:2)

?表示"重复零次或一次"。当这是正则表达式的第一个字符时,你期望重复零或一次?那是什么"什么都没有在零位置重复#34;意思是:在零位置你要求重复零次或一次,但没有什么可重复的。

如果您正在寻找文字问号,则需要转义问号:

topic = re.sub('\?X\?', 'лол', topic)