Word文档中的正则表达式

时间:2014-03-30 23:09:15

标签: python regex ms-word

我有一个带有不一致引号的大型文本文件,即

...Dolore magna aliquam “lorem ipsum” dolor sit amet, 'consectetuer adipiscing" elit, volutpat. Ut "wisi" enim...

我希望将每种风格的引号转换为Guillemet风格(»和«),以便示例句应该像

...Dolore magna aliquam »lorem ipsum« dolor sit amet, »consectetuer adipiscing« elit, volutpat. Ut »wisi« enim...

我正在考虑像

这样的正则表达式
`` ["'”“](.*?)["'”“]``

但我只知道如何用Python编写代码。 有没有办法在Python中实现这一目标?如果没有,有人可以直接在MS Word中提供有关如何完成该提示的提示。我尝试使用find / replace和通配符,但使用引号时的不一致会让我感到困惑。

2 个答案:

答案 0 :(得分:1)

如果您在“查找”窗口(例如“特殊字符”)中选中正确的选项,Word可以直接使用正则表达式,因此您只需在Ms Word中执行查找/替换。替换:

[“”'"»«]

'

如果您只想使用'字符作为引号,则上面是一个示例。 这将(例如)替换:

»consectetuer adipiscing"

使用:

'consectetuer adipiscing'

答案 1 :(得分:1)

尝试这种模式:

([“'"](?=[a-zA-Z\,\.\s])([a-zA-Z\,\.\s]*)[”'"])

的更换:

»$2«

编辑:既然你已经提到了 Python ,我想出了一些肯定会有用的东西:

#!/usr/bin/python
# coding: utf-8
import os, sys
import re
import codecs

with codecs.open('/path/to/file.txt', 'r', 'utf-8') as f:
    encoded = f.read()
    encoded = encoded.replace( u'\u201c', u'\"')
    encoded = encoded.replace( u'\u201d', u'\"')
    encoded = encoded.encode('utf-8')
    result = re.sub('(\s[\“\'\"](?=[a-zA-Z\,\.\s]*)([a-zA-Z\,\.\s]*)[\”\'\"]\s)', ' »\\2« ', encoded)
    decoded_result = result.decode('utf-8')
    print format(decoded_result)

/path/to/file.txt替换为文件的位置(使用utf-8编码保存)。

由于标点符号中使用的字符编码,上面的代码与标准搜索和替换有几点不同。可能有一种更简洁的方法来获得相同的最终结果,尽管使用Python整个编码事情都很棘手,所以这是任何人的猜测。