我将一些PHP代码转换为python。 php代码具有以下内容,用于匹配字符串中的姓氏:
preg_match("/([^ ]*) *$/",$c['name'],$r);
似乎只匹配字符串中的最后一个字。
想要转换它,我认为以下会这样做:
r = re.match('([\S]+)$', c['name'])
我认为应该在字符串结尾之前匹配任何非空格字符。逻辑是$
匹配字符串的结尾,([\S]+)
在字符串结尾之前匹配任何非空格字符一次或多次。然而,这对我来说并不起作用(尽管像pythex.org这样的网站建议应该这样做。)
我设法使用以下方法让它工作,但我想知道为什么上面的正则表达式不起作用,我怀疑它与反捕获有关但是我和#39;我不太熟悉它是如何工作的。为了测试我只是使用c [' name'] =' John Doe'
r = re.match('(?:.*\s)*([\S]+)', c['name'])
(在上面的正则表达式中,(?:.*\s)
是一个非捕获组,它匹配重复的字符,后跟一个类似空格的字符0次或更多次。然后捕获任何出现的非空格字符或者更多次。)
感谢。