Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-re编解码器&xE4ö;,芬兰语,定义那个词_Python_Regex_Codec - Fatal编程技术网

python-re编解码器&xE4ö;,芬兰语,定义那个词

python-re编解码器&xE4ö;,芬兰语,定义那个词,python,regex,codec,Python,Regex,Codec,是否可以定义特定语言字符将被视为单词。 也就是说,如果我按以下方式搜索,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-Z

是否可以定义特定语言字符将被视为单词。 也就是说,如果我按以下方式搜索,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]中。
如何定义它?

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

第一个参数是模式。您有“[^äÄöåäA-Za-z0-9]”,它与芬兰字母表或数字表中没有的每个字符相匹配

第二个参数是替换。您有“[^A-Za-z0-9]*”。。。因此,每个非芬兰语字母数字字符都将被文字字符串
[^A-Za-z0-9]*
替换。有理由假设这不是你想要的

  • 你想做什么

  • 你需要解释你的第三行;在前两行之后,
    word
    将是
    unicode
    对象的列表,这是一件好事。然而,
    encoding=
    errors=
    表明(对我们来说)未知的smart_str()正在将您可爱的unicode转换回UTF-8。处理UTF-8字节而不是Unicode字符的数据是有害的,除非您知道自己在做什么

  • 在源文件的顶部有什么编码指令

  • 建议:将数据转换为unicode。用unicode处理它。所有字符串常量都应该有
    u
    前缀;如果你认为你的打字手指磨损太大,至少把它放在非ASCII常量上,例如“代码> u”[^,SavaOdOrthux[AZ-Z09] ] < /COD>。完成所有处理后,使用适当的编码对结果进行编码,以便显示或存储

  • >P>当使用<代码> Re>代码>时,请考虑<代码> \W>代码>,它将匹配任何字母数字(以及下划线),而不是列出一种语言中的字母。不要使用re.UNICODE标志;医生


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

    第一个参数是模式。您有“[^äÄöåäA-Za-z0-9]”,它与芬兰字母表或数字表中没有的每个字符相匹配

    第二个参数是替换。您有“[^A-Za-z0-9]*”。。。因此,每个非芬兰语字母数字字符都将被文字字符串
    [^A-Za-z0-9]*
    替换。有理由假设这不是你想要的

  • 你想做什么

  • 你需要解释你的第三行;在前两行之后,
    word
    将是
    unicode
    对象的列表,这是一件好事。然而,
    encoding=
    errors=
    表明(对我们来说)未知的smart_str()正在将您可爱的unicode转换回UTF-8。处理UTF-8字节而不是Unicode字符的数据是有害的,除非您知道自己在做什么

  • 在源文件的顶部有什么编码指令

  • 建议:将数据转换为unicode。用unicode处理它。所有字符串常量都应该有
    u
    前缀;如果你认为你的打字手指磨损太大,至少把它放在非ASCII常量上,例如“代码> u”[^,SavaOdOrthux[AZ-Z09] ] < /COD>。完成所有处理后,使用适当的编码对结果进行编码,以便显示或存储

  • >P>当使用<代码> Re>代码>时,请考虑<代码> \W>代码>,它将匹配任何字母数字(以及下划线),而不是列出一种语言中的字母。不要使用re.UNICODE标志;医生


    像这样的事情可能会奏效:

    pattern = re.compile("(?u)pattern")
    


    像这样的事情可能会奏效:

    pattern = re.compile("(?u)pattern")
    


    [A-Za-z0-9]
    将只匹配此处列出的字符,但也会提到一些其他特殊结构,如:

    • \w
      表示字母数字字符(即
      [a-zA-Z0-9\
      加上所有声明为字母数字的unicode字符
    • \W
      表示所有nun字母数字字符
      [^a-zA-Z0-9\
      加unicode
    • \d
      代表数字
    • \b
      匹配单词边界(包括unicode表中的所有规则)
    因此,您将(a)改为使用此结构(较短且可能更易于阅读),以及(b)通过设置UNICODE标志,告诉re您希望使用当前语言环境“本地化”这些字符串,如:

    re_word = re.compile(r'\w+', re.U)
    

    [A-Za-z0-9]
    将只匹配此处列出的字符,但也会提到一些其他特殊结构,如:

    • \w
      表示字母数字字符(即
      [a-zA-Z0-9\
      加上所有声明为字母数字的unicode字符
    • \W
      表示所有nun字母数字字符
      [^a-zA-Z0-9\
      加unicode
    • \d
      代表数字
    • \b
      匹配单词边界(包括unicode表中的所有规则)
    因此,您将(a)改为使用此结构(较短且可能更易于阅读),以及(b)通过设置UNICODE标志,告诉re您希望使用当前语言环境“本地化”这些字符串,如:

    re_word = re.compile(r'\w+', re.U)
    

    在前两行之后,
    word
    将是Unicode字符串的列表。在前两行之后,
    word
    将是Unicode字符串的列表。
    re.Unicode
    与区域设置无关,使用
    re.locale
    依赖当前区域设置。
    re.Unicode
    与区域设置无关,使用
    re.locale
    依赖当前区域设置在当前区域设置上。