是否可以定义将特定语言字符视为单词。也就是说,如果我用以下方式搜索,re不接受ä,ö作为单词字符
Ft=codecs.open('c:\\Python27\\Scripts\\finnish2\\textfields.txt','r','utf–8')
word=Ft.readlines()
word=smart_str(word, encoding='utf-8', strings_only=False, errors='replace')
word=re.sub('[^äÄöÖåÅA-Za-z0-9]',"""\[^A-Za-z0-9]*""", word) ; print 'word= ', word #works in skipping ö,ä,å characters我希望这些字符将被包括在A-Za-z中。如何定义这一点?
发布于 2011-03-12 15:22:34
[A-Za-z0-9]将只匹配此处列出的字符,但docs还提到了其他一些特殊结构,如:
\w 代表字母数字字符(即 [a-zA-Z0-9_]加上所有声明为字母数字的 unicode 字符\W 代表所有非字母数字字符 [^a-zA-Z0-9_] 加上 unicode\d 代表数字\b 匹配单词边界(包括 unicode 表中的所有规则)因此,您将(a)改为使用此构造(它更短,可能更易于阅读),以及(b)通过设置UNICODE标志来“本地化”这些字符串,如下所示:
re_word = re.compile(r'\w+', re.U)发布于 2011-03-12 15:13:58
首先,您似乎对re.sub的参数有点迷惑。
第一个参数是模式。你有一个‘^ääeöÖaäA-Za-Z0-9’,它匹配不在芬兰语字母表和数字中的每个字符。
第二个arg是替代的。您有“^A-Za-Z0-9*”...因此,每个非芬兰语字母数字字符都将替换为文字字符串[^A-Za-z0-9]*。可以合理地假设这不是您想要的。
word将是一个unicode对象的列表,这是一件好事。但是,encoding=和errors=表明(对我们而言)未知的smart_str()正在将您可爱的unicode转换回UTF-8。使用UTF-8字节而不是Unicode字符处理数据是非常危险的,除非您知道自己在做什么。u 前缀; 如果您认为打字手指磨损过多,至少将其放在非 ASCII 常量上,例如 你u'[^äÄöÖåÅA-Za-z0-9]'。 完成所有处理后,使用适当的编码对结果进行编码以进行显示或存储。re 时,请考虑 \w 它将匹配任何字母数字(以及下划线),而不是列出一种语言中的字母。 请使用 re.UNICODE 标志; 文档在here。发布于 2011-03-12 15:19:06
下面这样的代码可能会起到作用:
pattern = re.compile("(?u)pattern")或
pattern = re.compile("pattern", re.UNICODE)https://stackoverflow.com/questions/5281165
复制相似问题