Как удалить текст в скобках, используя re.compile и re.findall? - PullRequest
2 голосов
/ 14 июня 2019

Я хочу удалить текст в скобках (включая скобки).Этот текст хранится в списках.Я также хотел бы сохранить выводимый текст (без скобок в новом списке).

Я попытался использовать:

es = ["49,331,076","23,136,275","139,500 (est.)","124,000","522 (ranked 23 of 137)"]
length=len(es)
regex = re.compile(".*?\((.*?)\)")
for x in range(length):
    listy.append(re.findall(regex, es[p]))
    p=p+1

Но это вернет текстмежду скобками.

ожидаемые результаты:

"[49,331,076, 23,136,275, 139,500, 124,000, 522]"

Результаты, которые я получил:

"[], [], [est.], [u'ranked 18 of 137']"

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Вы можете использовать re.sub с шаблоном \([^()]*\):

import re
es = ["49,331,076","23,136,275","139,500 (est.)","124,000","522 (ranked 23 of 137)"]
regex = re.compile(r"\([^()]*\)")
listy = []
for x in es:
    listy.append(regex.sub('', x).strip())
# Or, instead of the two lines above use a list comprehension:
# listy = [regex.sub('', x).strip() for x in es]
print(listy) # => ['49,331,076', '23,136,275', '139,500', '124,000', '522']

См. Демонстрационную версию Python

Обратите внимание, что элементы списка проще зацикливатьс for x in es: нет необходимости определять его длину, а затем отслеживать текущий элемент с помощью счетчика.Еще более Pythonic использует понимание списка: [regex.sub('', x).strip() for x in es].

Шаблон \([^()]*\) соответствует (, затем любые 0+ символов, кроме ( и ), а затем ).Если между ними может быть (, используйте \(.*?\) или \([^)]*\).

0 голосов
/ 14 июня 2019

Я бы просто сделал sub() со спичками:

import re
es = ["49,331,076","23,136,275","139,500 (est.)","124,000","522 (ranked 23 of 137)"]

length=len(es)
regex = re.compile("\(.+\)")
cleaned_es = [regex.sub('', val) for val in es]
print(cleaned_es)

Вы также можете добавить strip() только для удаления любых пробелов:

cleaned_es = [regex.sub('', val).strip() for val in es]

Что даст вам:

['49,331,076', '23,136,275', '139,500', '124,000', '522']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...