Python正则表达式捕捉@ [123456](约翰史密斯)

时间:2015-02-23 03:46:43

标签: python regex

我正在尝试以类似@ [123456](John Smith)的模式捕获id和名称,并使用它们创建一个类似于<的字符串。 a href =“123456”>约翰史密斯< / A>

这是我尝试过的,但它不起作用。

def format(text):

    def idrepl(match):
        fbid = match.group(1)
        name = match.group(2)
        print fbid, name
        return '<a href="https://www.facebook.com/{}">{}</a>'.format(fbid, name)

    return re.sub(r'\@\[(\d+)\]\[(\w\s+)\]', idrepl, text) 

1 个答案:

答案 0 :(得分:4)

部分

(\w\s+)

只匹配一个单词字符,后跟1个空格字符。

显然,你想要什么,而且很容易修复:

([\w\s]+)

“一个或多个字符,每个字符都是一个单词或空白字符”。

实际你想要什么,我不确定 - 快乐地匹配John Smith,但例如Maureen O'Hara(撇号会妨碍比赛)或John V. Smith(这里是阻碍比赛的点)或John Smith-Passell(这里是破折号)。

一般来说,人们用可能的几个标点字符(以及单词字符和空格)拼写他们的名字 - 撇号,点,短划线等。如果你不需要考虑到这一点,那么,很好! - )如果你,生活会变得更加困难(将这些字符放在上面的方括号中主要是这样,但需要采取预防措施 - 例如破折号,如果你需要它作为括号内的字符集的一部分,必须在最后,就在紧密括号之前)。