Python如何提取含指定子串的单词?支持大小写不匹配场景
提取句子中包含指定子串的单词(支持大小写不敏感匹配)
问题分析
你之前用re.findall(f".*{search}*", sentence)返回整个句子,是因为.*会匹配任意字符(包括空格)直到字符串结尾,根本没限定单词边界。下面给两种可靠的解决方法:
方法一:正则表达式推荐
正则能精准控制匹配逻辑,注意要转义搜索子串里的特殊字符(比如.是正则通配符,必须转义),同时开启大小写不敏感匹配:
import re sentence = "Hi this is just an Example.COM sentence" search = ".com" # 转义搜索子串中的正则特殊字符 escaped_search = re.escape(search) # 匹配包含指定子串的完整单词,不区分大小写 matches = re.findall(r'\b\w*' + escaped_search + r'\w*\b', sentence, flags=re.IGNORECASE) print(matches) # 输出: ['Example.COM']
关键细节:
re.escape(search):避免搜索子串里的特殊字符(比如.)被当作正则语法解析,确保匹配字面内容。\b:单词边界,保证只提取完整的单词,不会匹配句子中零散的字符片段。\w*:匹配子串前后的任意字母/数字/下划线,确保整个包含子串的单词被完整捕获。flags=re.IGNORECASE:开启大小写不敏感模式,不管子串是.com/.COM/.Com都能匹配到对应单词。
方法二:纯字符串操作适合新手
如果觉得正则难理解,用字符串拆分+列表推导式更直观:
sentence = "Hi this is just an Example.COM sentence" search = ".com" # 拆分句子为单词列表,遍历判断是否包含目标子串(大小写不敏感) words = sentence.split() matches = [word for word in words if search.lower() in word.lower()] print(matches) # 输出: ['Example.COM']
这种方法通过统一转小写来判断包含关系,同时保留原单词的大小写格式,逻辑简单易懂。
内容的提问来源于stack exchange,提问作者NeelamS
相关产品推荐
相关产品推荐

