用python的regex清理文本文件

2024-09-28 01:33:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大文件,上面有这样一行:

En g茅n茅ral un tr猫s bon hotel La terrasse du bar pr猫s du大堂

如何从文件的行中删除这些汉字字符,以便我得到一个新的文件,其中这些行只有罗马字母字符? 我在考虑使用正则表达式。 是否有所有罗马字母字符的字符类别,例如阿拉伯数字、a-nA-N和其他(标点符号)?在


Tags: 文件barpr字符类别hoteltrla
3条回答

我发现这个regex cheet sheet对于这种情况非常有用。在

# -*- coding: utf-8
import re
import string

u = u"En.!?+ 123 g茅n茅ral un tr猫s bon hotel La terrasse du bar pr猫s du lobby"
p = re.compile(r"[^\w\s\d{}]".format(re.escape(string.punctuation)))
for m in p.finditer(u):
    print m.group()

>>> 茅
>>> 茅
>>> 猫
>>> 猫

我也是^{}模块的超级粉丝。在

^{pr2}$

您可以使用^{}模块。在

>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>> 

看来你要替换的代码是中文的。如果所有字符串都是unicode,则可以使用简单范围[\u4e00-\u9fa5]替换它们。这不是全部的中文,但已经足够了。在

^{pr2}$

您可以不使用regex。在

要只保留ascii字符:

# -*- coding: utf-8 -*-
import unicodedata

unistr = u"En g茅n茅ral un tr猫s bon hotel La terrasse du bar pr猫s du lobby"
unistr = unicodedata.normalize('NFD', unistr) # to preserve `e` in `é`
ascii_bytes = unistr.encode('ascii', 'ignore')

要删除除ascii字母、数字、标点符号以外的所有内容:

^{pr2}$

相关问题 更多 >

    热门问题