我正在读取文件,并对文件内容使用正则表达式来执行某些操作。在读取文件时,我在文件中找不到任何特殊字符,但是在文件内容上使用正则表达式并将其保存到列表后,在数字前有特殊字符,例如\ 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
新结果列表包含原始文件中不存在的所有这些特殊字符
嗨,
您可以在其他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')
如果您知道所有这些特殊字符,则可以使用str的maketrans
和translate
方法按以下方式用空格替换它们:
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
被替换为空格。