用正则表达式代替括号

时间:2011-08-13 22:44:21

标签: python regex parentheses

我正在尝试复制文件,

>>> originalFile = '/Users/alvinspivey/Documents/workspace/Image_PCA/spectra_text/HIS/jean paul test 1 - Copy (2)/bean-1-aa.txt'
>>> copyFile = os.system('cp '+originalFile+' '+NewTmpFile)

但必须首先在open函数起作用之前替换空格和括号:

/ Users / alvinspivey / Documents / workspace / Image_PCA / spectra_text / HIS / jean \ paul \ test \ 1 \ - \ Copy \ \(2 \)/ bean-1-aa.txt

空格'' - > '\' 括号'(' - >'\('等。

更换空间工作:

>>> originalFile = re.sub(r'\s',r'\ ', os.path.join(root,file))

但是括号会返回错误:

>>> originalFile = re.sub(r'(',r'\(', originalFile)

追踪(最近一次通话):   文件“”,第1行,in   文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py”,第151行,在sub     return _compile(pattern,flags).sub(repl,string,count)   在_compile中输入文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py”,第244行     引发错误,v#无效表达 sre_constants.error:不平衡的括号

我是否正确替换了括号?

此外,为此使用re.escape()时,文件未正确返回。所以它不是替代品。

4 个答案:

答案 0 :(得分:2)

(在正则表达式(分组)中具有特殊含义,您必须将其转义:

originalFile = re.sub(r'\(',r'\(', originalFile)

或者,因为您没有使用正则表达式功能进行替换:

originalFile = re.sub(r'\(','\(', originalFile)

答案 1 :(得分:2)

正则表达式r'('被翻译为开始捕获组。这就是Python抱怨的原因。

如果您所做的只是替换空格和括号,那么可能只有string.replace会这样做吗?

答案 2 :(得分:2)

或者,如果你避免调用shell(os.system)来复制,你不必担心转义空格和其他特殊字符,

import shutil

originalFile = '/Users/alvinspivey/Documents/workspace/Image_PCA/spectra_text/HIS/jean paul test 1 - Copy (2)/bean-1-aa.txt'
newTmpFile = '/whatever.txt'
shutil.copy(originalFile, newTmpFile)

答案 3 :(得分:0)

  1. 使用shutil.copy复制文件,而不是调用系统。
  2. 使用subprocess而不是os.system - 它避免调用shell,因此不需要引用。