用于根据Unicode文本文件中的范围查找和替换数字的工具

时间:2014-07-29 13:51:39

标签: regex text unicode

我一直在寻找并且没有想法,所以我会在这里试试运气。 我需要做的很简单......或者我认为。

我需要处理许多在Windows环境中都遵循相同结构的Unicode文件。在这些文件中包含“valuexxx”的行,其中xxx是三位数字。我需要能够用字符串替换valuexxx,具体取决于xxx的值。解释我需要做的粗略方法是

  • 如果xxx >= 270xxx < 310,则用一些文字替换valuexxx
  • 如果xxx >= 311xxx < 350,则将valuexxx替换为其他文字。

范围可能需要稍后进行微调。

首先我认为我使用Notepad ++或FNR.exe,因为他们使用正则表达式,但是我发现正则表达式不能进行数值比较。我确实发现我可以通过测试有效的字符组合来解决它,但这不会起作用,因为范围可能需要更改并重新编辑所有字符组合对于我需要解决的人来说太麻烦了这个。

所以我转到了Gawk,它似乎能够进行我需要的比较,但它似乎无法处理Unicode文本文件。我不想从Unicode转换为其他东西,因为这些文件可以包含多种语言,如中文,日文,泰文等。

我不能自己编程这些东西,所以我需要一些可以做到这一点的工具。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为不存在现成的工具,但您可以非常简单地执行此类操作,例如在Python脚本中。

我假设你用Unicode表示UTF-8 - 编码文件。然后(在Python 3中),您只需要这样做来定义替换文本:

import re
repl = {(270,310): "some text",
        (311,350): "some other text",
        # etc., add more here
       }
regex = re.compile(r"value(\d{3})")

def replace(match):
    value = int(match.group(1))
    for item in repl:
        if item[0] <= value < item[1]:
            return repl[item]

然后您可以阅读文件,例如以.txt结尾的所有文件:

import glob
for filename in glob.glob("*.txt"):
    with open(filename, encoding="utf-8") as f:
        content = f.read()

然后写下更正后的文件:

    with open(filename + ".new", "w", encoding="utf-8") as f:
        f.write(regex.sub(replace, content))

那就是它。没有完成错误检查(例如,如果在repl中找不到三位数字),但我认为这应该可以让您开始。