0

我正在读取文件并在文件内容上使用正则表达式来执行一些操作。在读取文件时,我没有在其中找到任何特殊字符,但是在对文件内容使用正则表达式并将其保存到列表后,数字前有特殊字符,如 \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列表包含原始文件中不存在的所有这些特殊字符。

4

2 回答 2

1

如果您知道所有这些特殊字符,则可以使用strmaketranstranslate方法将它们替换为空格,方法如下:

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(因此它们必须具有相同的长度)并且 maketrans 的第三个参数中存在的每个字符是删除。在上面的示例\xa0中被替换为空格并被\t替换为空格。

于 2020-02-03T08:49:12.390 回答
0

在此处输入图像描述

你好,

你能在不同的 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')
于 2020-02-03T08:18:45.813 回答