【问题标题】:Error applying simple regexp应用简单正则表达式时出错
【发布时间】: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. 其他正则表达式都可以返回零子字符串,但它们并没有以错误结束!

【问题讨论】:

  • 这根本不是一个简单的正则表达式。

标签: python regex


【解决方案1】:

? 表示“重复零次或一次”。当那是正则表达式的第一个字符时,您期望什么重复零次或一次?这就是“在零位置没有重复”的意思:在零位置你要求重复零或一次的东西,但没有什么可以重复。

如果您要查找文字问号,则需要转义问号:

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

【讨论】:

  • 为了将其简化为一个最小的示例,错误仅显示为re.compile('?')
  • 这是我的错。这是我返回的旧作品,忘记了regex 的某些部分,您能否将我的问题标记为无关紧要?
  • @VladislavLadenkov:你有权删除自己的问题。
  • @BryanOakley 谢谢你的帮助!
猜你喜欢
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多