无法移除 - ' '尽管从文本中使用了re

时间:2016-06-08 06:35:01

标签: python regex python-2.7

我试过删除 - 和' '从下一个,但我无法删除。

我的编码如下:

import re

with open('NoSpace.text') as f1:
    with open('NoSymbol.text', 'w')as f2:
        lines = f1.readlines()
        for  line in lines:

        str = line
        regex = re.compile('[,\.!?@#=*^()-:""'']')
        m = regex.sub('', str)
                f2.write(m)


f2.close()
print('All symbols are removed')

以下是文字示例:

Physical geography – examines the natural environment and how the climate, vegetation & life, soil, water, and landforms are produced and interact.
==== Fields of physical geography ====

Glaciology – study of glaciers, or more generally ice and natural phenomena that involve ice.

Biogeography – study of the distribution of species spatially and temporally'refugium'.

运行脚本后的结果:

Glaciology – study of glaciers or more generally ice and natural phenomena that involve ice

Biogeography – study of the distribution of species spatially and temporally'refugium'

问题

从处理过的文本中注意到,某些符号仍然保留为 - 和' '

从我的编码中我添加了regex = re.compile('[,\.!?@#=*^()-:""'']')但它仍然无法将其删除。

当我尝试添加此符号时#34; - "进入regex = re.compile('[,\.!?@#=*^()-:–""'']')它给了我错误:

SyntaxError: Non-ASCII character '\xe2' in file SymbolRemove.py on line 9, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

请问我的问题有解决办法吗?

这就是我想要的:

Glaciology  study of glaciers or more generally ice and natural phenomena that involve ice

Biogeography  study of the distribution of species spatially and temporally refugium 

1 个答案:

答案 0 :(得分:1)

文本中的短划线是短划线(U+2013; Unicode字符),而不是ASCII减号。

除此之外,您的代码中也存在一些错误。

在字符类中(正则表达式中[...]内),短划线表示范围。因此,正则表达式中的)-:指定范围。这不是你想要的。

在Python中,您可以使用反斜杠指定文字短划线;更一般地说,便携式解决方案是将仪表板放在前面或后面,它不能表示范围。

regex = re.compile('[,.!?@#=*^()\-:""\']')

regex = re.compile('[-,.!?@#=*^():""\']')

(在一个角色类中,.不需要被转义,所以我把它拿出来了。单引号显然需要转义。)

字符类[)-:]包含以下字符:

>>> ''.join([chr(x) for x in range(ord(')'), ord(':'))])
')*+,-./0123456789'

最后,您不应该使用内置类型str的名称作为标识符,您不需要(甚至不能)close在{{1}中打开的内容在每次迭代时重新编译正则表达式是非常浪费的;逐行读取输入文件比将其全部读入内存然后迭代到巨大的缓冲区要高效得多。

with