首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python re codecsäö,芬兰语,定义为word

python re codecsäö,芬兰语,定义为word
EN

Stack Overflow用户
提问于 2011-03-12 15:08:11
回答 3查看 2K关注 0票数 1

是否可以定义将特定语言字符视为单词。也就是说,如果我用以下方式搜索,re不接受ä,ö作为单词字符

代码语言:javascript
复制
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中。如何定义这一点?

EN

回答 3

Stack Overflow用户

发布于 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标志来“本地化”这些字符串,如下所示:

代码语言:javascript
复制
re_word = re.compile(r'\w+', re.U)
票数 4
EN

Stack Overflow用户

发布于 2011-03-12 15:13:58

首先,您似乎对re.sub的参数有点迷惑。

第一个参数是模式。你有一个‘^ääeöÖaäA-Za-Z0-9’,它匹配不在芬兰语字母表和数字中的每个字符。

第二个arg是替代的。您有“^A-Za-Z0-9*”...因此,每个非芬兰语字母数字字符都将替换为文字字符串[^A-Za-z0-9]*。可以合理地假设这不是您想要的。

  1. 你想做什么?
  2. 你需要解释你的第三行;在你的前两行之后,word将是一个unicode对象的列表,这是一件好事。但是,encoding=errors=表明(对我们而言)未知的smart_str()正在将您可爱的unicode转换回UTF-8。使用UTF-8字节而不是Unicode字符处理数据是非常危险的,除非您知道自己在做什么。
  3. 您的源文件顶部有什么编码指令?
  4. 建议:将您的数据转换为 unicode。 用 unicode 处理它。 你所有的字符串常量都应该有 u 前缀; 如果您认为打字手指磨损过多,至少将其放在非 ASCII 常量上,例如 你u'[^äÄöÖåÅA-Za-z0-9]'。 完成所有处理后,使用适当的编码对结果进行编码以进行显示或存储。
  5. 使用 re 时,请考虑 \w 它将匹配任何字母数字(以及下划线),而不是列出一种语言中的字母。 请使用 re.UNICODE 标志; 文档在here
票数 2
EN

Stack Overflow用户

发布于 2011-03-12 15:19:06

下面这样的代码可能会起到作用:

代码语言:javascript
复制
pattern = re.compile("(?u)pattern")

代码语言:javascript
复制
pattern = re.compile("pattern", re.UNICODE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5281165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档