求助:Python正则表达式re.search匹配结果不符合预期问题排查
解决Python正则表达式匹配不符合预期的问题
你的代码问题出在正则表达式r"^\w \w"的设计上,它只匹配字符串开头的单个单词字符 + 单个空格 + 单个单词字符,完全不符合你测试用例体现的需求。具体问题点:
\w仅匹配单个单词字符,无法匹配由多个字符组成的完整单词(比如username)- 单个空格
只能匹配一个空格,无法处理多个空格分隔的情况(比如123 Ready里的两个空格) ^限定了匹配必须从字符串开头开始,且仅检查前三个字符,而非整个字符串中是否存在符合条件的结构
根据你的测试用例预期,正确的需求应该是检查字符串中是否存在至少两个由一个或多个空格分隔的完整单词字符序列,对应的修改方案如下:
修改后的代码
import re def check_character_groups(text): # 匹配"一个或多个单词字符 + 一个或多个空格 + 一个或多个单词字符"的结构 result = re.search(r"\w+\s+\w+", text) return result is not None print(check_character_groups("One")) # False print(check_character_groups("123 Ready Set GO")) # True print(check_character_groups("username user_01")) # True print(check_character_groups("shopping_list: milk, bread, eggs.")) # False
正则说明
\w+:匹配一个或多个单词字符(字母、数字、下划线),对应完整的单词组\s+:匹配一个或多个空白字符(包括空格、制表符等),如果只想匹配空格,可替换为+re.search会在整个字符串中查找该模式,只要存在就返回匹配对象,否则返回None
如果你的需求是字符串开头必须是两个由空格分隔的单词,只需把正则改为r"^\w+\s+\w+"即可,同样能满足你的测试用例预期。
内容的提问来源于stack exchange,提问作者Alexandra Araújo
相关产品推荐
相关产品推荐

