Python查找和替换脚本中的正则表达式?更新

时间:2010-06-14 11:10:27

标签: python regex

我是Python脚本的新手,所以如果这个问题的答案看起来很明显,请提前原谅我。

我正在尝试使用Python组建一个大规模的查找和替换脚本。我正在使用类似于以下内容的代码:

infile = sys.argv[1]
charenc = sys.argv[2]
outFile=infile+'.output'

findreplace = [
('term1', 'term2'),
]

inF = open(infile,'rb')
s=unicode(inF.read(),charenc)
inF.close()

for couple in findreplace:
    outtext=s.replace(couple[0],couple[1])
    s=outtext

outF = open(outFile,'wb')
outF.write(outtext.encode('utf-8'))
outF.close()

如何让脚本执行查找和替换正则表达式?

具体来说,我希望它能够找到文本文件顶部指定的一些信息(元数据)。例如:

Title: This is the title
Author: This is the author
Date: This is the date

并将其转换为LaTeX格式。例如:

\title{This is the title}
\author{This is the author}
\date{This is the date}

也许我正在以错误的方式解决这个问题。如果有比正则表达更好的方式,请告诉我!

谢谢!

更新:感谢您在答案中发布一些示例代码!只要我替换了findreplace动作,我就可以让它工作,但我不能让它们都工作。现在的问题是我无法将其正确地集成到我所拥有的代码中。我如何让脚本在下面的代码片段中对'outtext'进行多项操作?

for couple in findreplace:
    outtext=s.replace(couple[0],couple[1])
    s=outtext

4 个答案:

答案 0 :(得分:5)

>>> import re
>>> s = """Title: This is the title
... Author: This is the author
... Date: This is the date"""
>>> p = re.compile(r'^(\w+):\s*(.+)$', re.M)
>>> print p.sub(r'\\\1{\2}', s)
\Title{This is the title}
\Author{This is the author}
\Date{This is the date}

要更改大小写,请使用函数作为替换参数:

def repl_cb(m):
    return "\\%s{%s}" %(m.group(1).lower(), m.group(2))

p = re.compile(r'^(\w+):\s*(.+)$', re.M)
print p.sub(repl_cb, s)
  

\title{This is the title}
  \author{This is the author}
  \date{This is the date}

答案 1 :(得分:1)

请参阅re.sub()

答案 2 :(得分:0)

你想要的正则表达式可能就是这一行:

^([^:]+): (.*)

,替换表达式为

\\\1{\2}

答案 3 :(得分:0)

>>> import re
>>> m = 'title', 'author', 'date'
>>> s = """Title: This is the title
Author: This is the author
Date: This is the date"""
>>> for i in m:
    s = re.compile(i+': (.*)', re.I).sub(r'\\' + i + r'{\1}', s)


>>> print(s)
\title{This is the title}
\author{This is the author}
\date{This is the date}