2014-09-28 69 views
0

我有一个单一参数的函数,它是一个包含重音字符的unicode字符串。我想在该字符串中找到一个或多个模式并将其打印出来。Python 2.7正确的语法重新匹配Unicode字符串中的重音字符?

我不知道如何正确地格式化模式,或者正确使用re.match与unicode,或者使用unicode提取match.groups()。使用ASCII更容易。哎呀。

的Python 2.7

sentence = "These characters, ÄÜ, are special." 

def findInSentence(sentence): 

    pattern = re.compile("ÄÜ", re.UNICODE) 
    return re.match(sentence, pattern).groups() 

回答

1

有正确使用若干问题的Unicode:

  1. 声明源文件的编码。
  2. 将文件保存在声明的编码中。
  3. 使用Unicode字符串。

另外,正确使用re.search作为@ M42指出。

在您的搜索模式中也没有groups(),因此如果存在匹配,请使用.group(0)打印匹配项。

注意re.UNICODE没有在这种情况下必要的,因为它不仅影响如何的特殊匹配序列\w\W\b\B\d\D\s\S工作,他们没有被使用。

# coding: utf-8 
import re 

sentence = u"These characters, ÄÜ, are special." 

def findInSentence(sentence): 
    pattern = re.compile(u"ÄÜ", re.UNICODE) 
    return re.search(pattern, sentence).group(0) 

print findInSentence(sentence) 

输出:

ÄÜ 
1

使用re.search而不是re.match

re.match被锚定在字符串的开头,并且re.search搜索整个字符串。

的语法searchmatch是:

re.search(pattern, string, flags=0) 
re.match(pattern, string, flags=0) 

你倒的模式和字符串。

+0

这是行不通的。我无法编码字符串或使用重新。功能不会出错。 – 2014-09-28 09:10:23

+0

@ user1473511:交换模式和字符串,请参阅我的编辑。 – Toto 2014-09-28 09:16:31

+0

sentence =“这些字符,”很特别。“ 该行引发错误。 – 2014-09-28 09:22:53