如何检测含问候语变体与姓名的字符串?正则表达式问题求助
解决问候语+姓名的正则匹配问题
你当前的正则表达式拼接后变成了hi|HeyAmy|David,逻辑完全错了——它会匹配单独的"hi"、连在一起的"HeyAmy"或者单独的"David",根本没实现「问候语+姓名」的匹配逻辑,这就是为啥只能匹配首个变体。
给你两个修正方案,按需选择:
固定问候语+固定姓名的场景
如果问候语只有Hi/Hey,姓名是Amy/David这类固定名单,用这个正则:
import re # 测试输入示例 test_strings = ["Hey David", "Hi Amy", "hey amy", "HEY DAVID"] for string in test_strings: # 正则逻辑:(问候语分组) + 至少一个空格 + (姓名分组),忽略大小写 if re.search(r'(hi|hey)\s+(Amy|David)', string, re.IGNORECASE): print("匹配成功:test")
固定问候语+任意姓名的场景
如果姓名是任意英文姓名(不限制固定名单),把姓名部分换成匹配英文单词的规则:
import re string = "Hey Max" if re.search(r'(hi|hey)\s+[A-Za-z]+', string, re.IGNORECASE): print("匹配成功:test")
额外提示
- 用
re.search比re.findall更高效,因为我们只需要判断是否存在匹配,不需要提取所有结果 - 要加更多问候语变体(比如Hello、Hiya),直接在第一个括号里补充就行:
(hi|hey|hello|hiya)
内容的提问来源于stack exchange,提问作者Nopsii
相关产品推荐
相关产品推荐

