我的文件中包含用不同语言编写的文字。我想用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吗?
谢谢。
答案 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>.*)')
第一组定义了可能的前缀(您可能希望将其修复为一个或多个空格而不是文字空间)。第二个命名的小组得到了这个词。