2015-03-25 2 views
1

Примечания: Я использую Python3Как удалить коды ALL IRC цвета из строки

Я искал везде и не найдя ничего полного. Спросить в IRC везде. Мне нужно выражение регулярного выражения, которое удаляет ВСЕ коды управления цветом IRC. Нигде не существует полного решения.

Полужирный, курсив, Подчеркнутый, Обратный, Цветной и Обычный текст Номера символов 2 29 31 22 3 15 соответственно.

Отредактировано:

Я просто нашел \ X0F символ используется также.

Символ цвета (3) содержит, возможно, максимум 2 цифры после него, с возможной запятой, а затем максимум до 2 цифр или без цифр только символ 3. Он также может быть просто запятой с простым текстом после него в в этом случае запятая должна быть оставлена ​​в строке.

Пожалуйста, помогите, я застрял в грязи.

Пример:

'\003' + '12,4' + 'Red and blue' + '\003'+', \031Underline\031' 

12 синий и красный 4, используется с характером 3.

ожидаемый результат просто «Красный и синий, подчеркивание» простой текст, без цветовых кодов , Таким образом, я могу использовать:

line = 'Red and blue, Underline' 

line.split(' ')[0] == 'Red' 
+0

пример с ожидаемым выходом будет лучше. –

+0

Пример 12,4 и синий, подчеркивание. Управляющие символы не отображаются в браузере. Возможно, '\ 003' + '12, 4 '+' Красный и синий '+' \ 003 '+', \ 031Underline \ 031 ' – baudsmoke

+0

, пожалуйста, используйте блоки кода для отображения кода, контрольные символы могут отображаться в браузере, если используется блок кода , Вы можете изменить свой вопрос, чтобы уточнить, что – arkoak

ответ

0
[\x02\x0F\x16\x1D\x1F]|\x03(\d{,2}(,\d{,2})?)? 

Это будет соответствовать все коды форматирования IRC вы упомянули. В случае цветовых кодов он даже поймает неверные формы, такие как \x03,11, \x034, и \x03,. Я понимаю, что это может быть или не быть идеальным в зависимости от того, как вы хотите обрабатывать неверные коды, подобные этим, но вы можете легко настроить его, чтобы делать то, что вы хотите. Если нужно, вы можете объяснить, как вы хотите обработать, и я могу обновить ответ, чтобы это отразить.

Что касается того, что делать, одно решение:

pattern = r'[\x02\x0F\x16\x1D\x1F]|\x03(\d{,2}(,\d{,2})?)?'; 
text = '\x0312,4Text\x03'; 
stripped = re.sub(pattern, '', text); 

Смотрите также Section 6.2 из документации Python.

+0

С \ x03,11 \ x034 и \ x03 запятая должна быть оставлена ​​в виде обычного текста. Также как мы используем это регулярное выражение?text = '\ x0312,4Text \ x03; striptext = regex_that_returns_plain_text (текст) – baudsmoke

+0

Почему вы хотите оставить запятую? Вы будете обрабатывать искаженные цветовые коды, оставив позади запятую, которой не должно быть в первую очередь. Все это нужно раздеть. Что касается того, как применить его, я отредактировал ответ (вы могли бы найти это самостоятельно, ища несколько секунд). – ZeroKnight

+0

ZeroKnight Запятая остается, потому что если вы окрашиваете запятую или заканчиваете цвет в запятой, запятая остается. Его не уродливый, его как по дизайну. поэтому \ x03, текст так, что это ошибка, если текст является числом из-за пробела после элемента управления? Во всех случаях запятая находится там, где текст начинается, а не удаляется. – baudsmoke

0

Я знаю, что я попросил решение для регулярного выражения, но я, наконец, добрался до кодирования рабочего решения без регулярных выражений.

def colourstrip(data): 
    find = data.find('\x03') 
    while find > -1: 
     done = False 
     data = data[0:find] + data[find+1:] 
     if len(data) <= find+1: 
      done = True 
     try: 
      assert int(data[find]) 
      data = data[0:find] + data[find+1:] 
     except: 
      done = True 
     try: 
      assert not done 
      assert int(data[find]) 
      data = data[0:find] + data[find+1:] 
     except: 
      if not done and (data[find] != ','): 
       done = True 
     if (len(data) > find+1) and (data[find] == ','): 
      try: 
       assert not done 
       assert int(data[find+1]) 
       data = data[0:find] + data[find+1:] 
       data = data[0:find] + data[find+1:] 
      except: 
       done = True 
      try: 
       assert not done 
       assert int(data[find]) 
       data = data[0:find] + data[find+1:] 
      except: pass 

     find = data.find('\x03') 
    data = data.replace('\x02','') 
    data = data.replace('\x1d','') 
    data = data.replace('\x1f','') 
    data = data.replace('\x16','') 
    data = data.replace('\x0f','') 
    return data 

datastring = '\x0312,4This is coolour \x032,4This is too\x03'  
print(colourstrip(datastring)) 

Благодарим за помощь всем.

 Смежные вопросы

  • Нет связанных вопросов^_^