【发布时间】:2017-07-10 12:50:13
【问题描述】:
我有一个简单的问题让我发疯,似乎是由于在 python 中处理unicode 字符。
我的磁盘上存储了latex 表(与http://www.jwe.cc/downloads/table.tex 非常相似),我想在其上应用一些正则表达式,以便连字符- (\u2212) 被短划线@987654326 替换@(alt 0150或\u2013)
我正在使用以下函数来执行两种不同的正则表达式和替换。
import re
import glob
def mychanger(fileName):
with open(fileName,'r') as file:
str = file.read()
str = str.decode("utf-8")
str = re.sub(r"((?:^|[^{])\d+)\u2212(\d+[^}])","\\1\u2013\\2", str).encode("utf-8")
str = re.sub(r"(^|[^0-9])\u2212(\d+)","\\1\u2013\\2", str).encode("utf-8")
with open(fileName,'wb') as file:
file.write(str)
myfile = glob.glob("C://*.tex")
for file in myfile: mychanger(file)
不幸的是,这并没有改变任何东西。
如果我使用非 unicode 字符(如 $ 而不是 \u2013),它仍然有效,这意味着正则表达式代码是正确的。
我迷路了,我尝试使用re.sub(ur"((?:^|[^{])\d+)\u2212(\d+[^}])","\\1\u2013\\2", str).encode("utf-8"),但它仍然没有改变任何东西。
这里有什么问题?谢谢!
【问题讨论】:
-
试试:
u"\\1\u2013\\2" -
Noobie,你为什么要传递一个列表?您在此处发布的代码似乎不是您正在运行的代码。
-
只有在所有替换完成后才尝试对字符串进行编码。
-
DashPunctuation 连字符减号是
-(\u002D) 不同于 MathSymbol 减号−(\u2212)。 -
Python 2.x 还是 3.x?
标签: python regex unicode character-encoding