2012-03-25 3 views
1

Скажем, у меня есть строка:не могу удалять. Текст. используя регулярное выражение

"the quick brown fox jumped over the moon.this text needs to be removed." 

Я пытаюсь удалить ".this text needs to be removed." с помощью Python.

Я пробовал несколько способов сделать это, в основном состоящий из \w+(\..*\.), но он не работает. Мне нужен общий способ удалить эту последнюю часть, так как текст отличается от одного файла, поэтому что-то вроде re.sub('\.this text needs to be removed\.', '', string) не будет работать для меня.

+0

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

+0

Dot - это специальный символ в Markdown (для перечислений), поэтому используйте \. он в текстовом режиме вызывает только точку, показывающую. Чтобы исправить это, используйте обратные ссылки для кода (как и в случае с вашим вопросом, теперь отредактированный) или избегайте обратной косой черты, когда вам это нужно в текстовом формате. – Eric

+0

Чтобы улучшить ваш вопрос, это может помочь, если вы немного более конкретны в своих попытках и продемонстрируете как рабочие, так и неработающие входы/выходы. – Eric

ответ

1

Ваше регулярное выражение должно выглядеть следующим образом:

re.sub(r'\.[^.]*?\.$', '', someString) 

Это гарантирует, что re.sub соответствует только текст между периодами в конце строки. Без $ он будет соответствовать любому набору совпадающих периодов в строке.

EDIT

Если вы хотите, чтобы захватить все между точками: \..*\.

+0

Цитата из вопроса: «что-то вроде« re.sub («этот текст нужно удалить.», «Строка») «не сработает для меня» –

+0

@NiklasB .: Это работает абсолютно нормально для меня, Я только что предположил, что ОП забыл избежать его периодов. –

+0

Что подразумевается под этим OP, так это то, что он не может перекодировать текст между точками, потому что он может быть другим. Но да, это может быть неверно истолковано, поэтому я удалю свой нисходящий канал, если вы отредактируете ответ, потому что он заблокирован. –

0

Вы забыли избежать . и сделали некоторые другие ошибки. Это должно работать:

s = "the quick brown fox jumped over the moon.this text needs to be removed." 
s = re.sub("\..*\.", "", s) 
0

Если вы хотите сделать это с помощью регулярных выражений просто использовать суб.

>>> re.sub("\.this text needs to be removed\.","","the quick brown fox jumped over the moon.this text needs to be removed.") 
'the quick brown fox jumped over the moon' 

Но задача столь же просто, как это может быть сделана с Python строки функциональностью

>>> "the quick brown fox jumped over the moon.this text needs to be removed.".replace(".this text needs to be removed.","") 
'the quick brown fox jumped over the moon' 

И родовым способом удалить последнее предложение будет

>>> re.sub("\.[^\.]+","","the quick brown fox jumped over the moon.this text needs to be removed.") 
'the quick brown fox jumped over the moon.' 

И без регулярных выражений будут

>>> ''.join("the quick brown fox jumped over the moon.this text needs to be removed.".rsplit('.',2)[:-2]) 
'the quick brown fox jumped over the moon' 
>>> 
+1

Цитата из вопроса: «что-то вроде,' re.sub ('. Этот текст нужно удалить.', '', String) 'не будет работать для меня" –

+0

@Niklas, см. Мое обновление. OP отредактировал эпилог позже, после того, как все приведенные ниже постеры отправили свой ответ – Abhijit

+0

@NiklasB .: Если плакат обновляет вопрос/ответ в течение 5 минут редактирования, он не появляется в истории. В любом случае, я пропустил это, или это не было их оригинальное сообщение, поэтому аргумент в пользу этого :-) – Abhijit

1

Я согласен с abhijit, почему бы просто не использовать строковые функции? Например:

Хотя регулярные выражения очень мощные, методы строковых объектов часто оптимизируются для производительности.

1

Чтения вашего вопроса, вы можете добиться того, что вы хотите с:

str = 'the quick brown fox jumped over the moon.this text needs to be removed.' 
str = str.split('.this text needs to be removed.', 1) 

print str[0] /* it prints "the quick brown fox jumped over the moon" */ 
+0

этот код ужасно неприменим. Даже если строка оставалась статической (что я сомневаюсь в этом), то: 40 жестко закодирован, подвержен ошибкам и не универсален. – hexparrot

+0

Вы правы. Теперь я исправил код. –

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