我想用正则表达式选择下面句子中的名字和姓氏(空格应该被忽略)
Demandé par Dr : NAME SURNAME
你能帮我找到正确的正则表达式吗?
编辑:我的尝试是:(?<=Dr.:....)(.*)
但这并不好,因为空间可能会改变。
编辑2:对我来说最好的方法是:(?:Demandé par Dr :|(?!^)\G)\s*\K(.*)
或更好(?:Demand. par Dr :|(?!^)\G)\s*\K(.*)
地避免特殊字符问题;)
这应该这样做
/Demandé par Dr :\s*(\w+)\s+(\w+)/
你可以使用这个正则表达式[a-zA-Z]+\s[a-zA-Z]+
如果您只想查找名字和第二个名字。但是如果你想添加更多,你只需要添加\s[a-zA-Z]+
,它表示一个空格,后面跟着一个从 a 到 z 的字母。它可以是大写也可以不是,加号表示它可以有多个字母。我希望这可以帮助你。
如果您只想要冒号后的名称,那么您甚至不需要正则表达式。只需拆分冒号上的字符串,获取第二个结果,然后修剪它。
你提到你正在使用PHP,所以......
$splitData = explode(':',$inputString);
$fullName = trim($splitData[1]);
任务完成。不需要正则表达式。
您可以使用的正则表达式是:
/:\s*(\S+)\s+(\S+)/
这将匹配:
它之后的所有内容,忽略空格。这假定姓名或姓氏中没有空格。
名字将在.group(1)
,姓氏在.group(2)
如果您不想访问群组...
preg_match_all('/(?:Demandé par Dr :|(?!^)\G)\s*\K(?:\S+)/', $string)