Как удалить специальные символы из списка строк? - PullRequest
0 голосов
/ 03 февраля 2020

Я читаю файл и использую регулярное выражение для содержимого файла для выполнения некоторых операций. При чтении файла я не нахожу в нем никаких специальных символов, но после использования регулярного выражения в содержимом файла и сохранения его в списке перед цифрами появляются специальные символы, такие как \ t и \ xa0.

Пример содержимого файла:

Hydrochloric Acid to pHÂ 3.3-5.0        q.s.    q.s.    q.s.    pH-regulator    Ph Eur, NF

После применения регулярное выражение становится:

Hydrochloric Acid to pHÂ\xa03.3-5.0\tq.s.\tq.s.\tq.s.\tpH-regulator\tPh Eur, NF

Как удалить все это без отдельных методов замены строк?

Код:

def extract(filename):
    file=open(filename)
    file=file.read()
    print(file)
    print("wefewwEF3RF3")
    result = []
    med = r"(?:{})".format("|".join(map(re.escape, medicines)))
    pattern = re.compile(r"^\s*" + med + r".*(?:\n[^\w\n]*\d*\.?\d+[^\w\n]*(?:\n.*){2})?", re.M|re.IGNORECASE)
    result = pattern.findall(file)
#    result.encode('ascii', 'ignore')
    newresult = []
    for line in result:
        newresult.append((line.strip()))
    return newresult

Список newresult содержит все эти специальные символы, которых нет в исходном файле.

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Если вы знаете все эти специальные символы , вы можете использовать maketrans и translate методы str для замены их пробелами следующим образом:

txt = 'Hydrochloric Acid to pHÂ\xa03.3-5.0\tq.s.\tq.s.\tq.s.\tpH-regulator\tPh Eur, NF'
t = ''.maketrans('\xa0\t','  ')
newtxt = txt.translate(t)
print(newtxt)

Вывод

Hydrochloric Acid to pHÂ 3.3-5.0 q.s. q.s. q.s. pH-regulator Ph Eur, NF

maketrans принимает 2 или 3 аргумента. Он создает таблицу перевода, которая затем может быть использована в методе translate и работает следующим образом: каждый символ из первого аргумента maketrans заменяется соответствующим символом из второго аргумента maketrans (таким образом, они должны иметь одинаковую длину) и каждый символ, присутствующий в третьем аргументе макетранса, удаляется. В приведенном выше примере \xa0 заменяется пробелом, а \t заменяется пробелом.

0 голосов
/ 03 февраля 2020

enter image description here

Привет,

Можете ли вы проверить свой код в другой версии Python? Вроде работает без ошибок на 3.8.0.

def extract(filename):
    file='Hydrochloric Acid to pHÂ 3.3-5.0        q.s.    q.s.    q.s.    pH-regulator    Ph Eur, NF'
    result = []
    med = r"(?:{})".format("|".join(map(re.escape, file)))
    pattern = re.compile(r"^\s*" + med + r".*(?:\n[^\w\n]*\d*\.?\d+[^\w\n]*(?:\n.*){2})?", re.M|re.IGNORECASE)
    result = pattern.findall(file)
    #result.encode('ascii', 'ignore')
    newresult = []
    for line in result:
        newresult.append((line.strip()))
    print(file)
    print (newresult)
    return newresult
extract('test')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...