如何在python中使用国际单词解析文件

时间:2012-03-05 16:25:53

标签: python regex

我的文件中包含用不同语言编写的文字。我想用python编程语言解析它们,在所有文件中都有相同的结构。 目前文件包含

之类的行
1. word1
24. word2
- word3
word4
** word5

目标是将所有这些内容写成

** word

我已经从一个文件中读取了一些代码,fr和写入新文件,fw,就像这样

    for line in fr:
        match = re.search(r'^\*\* .*', line)
        if match:
        fw.write(line)

我有两个问题。

第一个问题。如何编写正则表达式,所以它将搜索不是从alpha字符开始的行并删除所有在alpha字符之前的内容?

我试过这样的

fw.write(re.sub(r'(^([^a-zA-Z].*)([a-zA-Z])*.*)', "** \1", line))

但它不起作用。

第二个问题。如何验证字符串是否以字母字符开头。我试过了

print line[0].isalpha()

它返回?我需要首先使用unicode吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

一封信的unicode属性是:\pL。把它放在[a-zA-Z]

的位置

将其用作:

^\PL*(\pL+)

这意味着0个或更多非字母后跟1组中捕获的1个或多个字母。

答案 1 :(得分:0)

导入codecs模块并使用

打开文件
fp = codecs.open(filename, encoding='utf-8')

如果您的文件混合使用多种语言,则最有可能是正确的。如果没有,请确定您应该使用哪种编码。这将为您提供unicode,您的RE将有希望正常工作。

答案 2 :(得分:0)

尝试匹配任何可能的行前缀,然后收集该行的其余部分作为您感兴趣的词。

pat = re.compile(r'^(\d+\. |- |\*\* )?(?P<word>.*)')

第一组定义了可能的前缀(您可能希望将其修复为一个或多个空格而不是文字空间)。第二个命名的小组得到了这个词。