Python Regex 捕获@[123456](John Smith)

标签 python regex

我正在尝试以类似@[123456](John Smith) 的模式捕获 ID 和名称,并使用它们创建类似 John Smith 的字符串。

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

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) 

最佳答案

部分

(\w\s+)

恰好匹配一个单词字符后跟 1 个以上的空白字符。

很明显,这不是您想要的,而且很容易修复:

([\w\s]+)

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

这是否是实际上您想要的,我不确定——它愉快地匹配John Smith,但不是 例如 Maureen O'Hara(撇号会阻碍匹配)或 John V. Smith(此处是阻碍匹配的点)或 John Smith-Passell(这里是破折号)。

一般来说,人们在拼写自己的名字时可能会使用多个标点字符(以及单词字符和空格)——撇号、点、破折号等等。如果你不需要考虑这个,那么,很好!-) 如果你这样做,生活会变得有点困难(将这些字符放在上面的方括号内大部分都可以,但需要采取预防措施-- 例如破折号,如果您需要它成为括号字符集的一部分,则它必须位于末尾,就在右括号之前)。

关于Python Regex 捕获@[123456](John Smith),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666624/

相关文章:

Python/Pygame 颜色不是元组 : unhashable type error when used as dictionary keys

python - 引用对象数据成员时使用变量

php - 正则表达式检查另一个字符串中是否存在一个字符串

javascript - 带星号的正则表达式电话号码

php - 正则表达式解析 imdb 页面并获取名称

regex - Flex(适合正则表达式)- 匹配以相同字符开头和结尾的字符串

python - 遍历 my_dict.keys() 并修改字典中的值是否会使迭代器无效?

python - Azure Devops 上传图像

Python-strptime ValueError未转换的数据仍然是: :00

python - 会给出某些单词python的正则表达式