2014-02-07 5 views
3

Я анализирую текст на не буквенно-цифровых символах и хотел бы исключить определенные символы, такие как апострофы, тире/дефисы и запятые.Regex игнорировать определенные символы

Я хотел бы построить регулярное выражение для следующих случаев:

  1. не алфавитно-цифровой символ, за исключением апостроф и hypens
  2. не алфавитно-цифровой символ, за исключением запятые, апострофов и hypens

Это то, что я пробовал:

def split_text(text): 
    my_text = re.split('\W',text) 

    # the following doesn't work. 
    #my_text = re.split('([A-Z]\w*)',text) 
    #my_text = re.split("^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$",text) 

    return my_text 
  • Случай 1:
    • Пример ввода: Что это? Приятно видеть тебя, мой друг. «Привет» миру!
    • Образец вывода: ['What', 'up', 'It', 'good', 'to', 'see', 'you', 'my-friend', 'Hello', 'to- »,„мир“]
  • Случай 2:
    • Пример ввода: это означает, что это не хорошо, чтобы делать такие вещи.
    • Пример вывода: [ 'Это', 'означает', 'что', 'это', 'не', 'хорошо к', 'делать', 'такой', 'вещи']

Любые идеи

+0

В вашем коде есть некоторые ошибки (не связанные с вопросом). отсутствующий двоеточие в конце первой строки и отступы внутри самой функции. – elParaguayo

+0

Спасибо за указание, исправлено. – user3247054

ответ

3

это то, что вы хотите?

не алфавитно-цифровой символ, за исключением апострофа и hypens

my_text = re.split(r"[^\w'-]+",text) 

не алфавитно-цифровой символ, за исключением запятые, апостроф и hypens

my_text = re.split(r"[^\w-',]+",text) 

в [] синтаксиса Определяет класс символов, [^..]«дополняет» его, то есть отрицает его.

Смотрите documentation о том, что:

символов, которые не являются в пределах диапазона может быть подобран путем дополнения набора. Если первый символ набора равен'^', , все символы, которые не находятся в наборе, будут совпадать. Например,[^5]будет соответствовать любому символу, кроме'5'и[^^]будет соответствовать любому символу, кроме'^'. ^не имеет особого значения, если это не первый символ в наборе.

+0

Большое спасибо за ваш ответ и объяснение. – user3247054

3

Вы можете использовать отрицается character class для этого:

my_text = re.split(r"[^\w'-]+",text) 

или

my_text = re.split(r"[^\w,'-]+",text) # also excludes commas 
+0

Большое спасибо за ваш ответ. – user3247054

+0

с объяснением zmo, нормально ли, если я соглашусь на его ответ? – user3247054

+1

@ user3247054: Конечно, и вам не нужно спрашивать :) (На самом деле даже не нужно говорить «Спасибо», upvotes - это лучшее, что вы можете дать.) –

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