Python正则如何匹配到第一个'World'时停止匹配?
解决方案
问题根源在于正则表达式的贪婪匹配特性:[\w\W]+会尽可能匹配最多的字符,所以它会从第一个空格后一直匹配到字符串末尾的World,导致结果包含了多余的内容。要让匹配在遇到第一个World时就停止,只需切换为非贪婪模式,或使用更精准的匹配规则:
方法一:给量词添加非贪婪修饰符
将原有的[\w\W]+改为[\w\W]+?,?会让量词匹配最少的字符以满足规则。修改后的代码如下:
import re test_string = "Hello Hello World World" pattern = "Hello World".replace(" ", "[\w\W]+?") match = re.search(pattern, test_string) print(match.group()) # 输出:Hello Hello World
方法二:用更简洁的等价写法(推荐)
[\w\W]+等价于匹配任意字符的.(默认不匹配换行符,若需匹配换行可添加re.DOTALL参数),同样搭配非贪婪量词?即可:
import re test_string = "Hello Hello World World" pattern = "Hello World".replace(" ", ".+?") match = re.search(pattern, test_string) print(match.group())
方法三:针对空白场景的精准匹配
如果两个目标词之间只有空白字符(无特殊符号),可以用\s+?匹配最少的空白序列,更贴合实际场景:
import re test_string = "Hello Hello World World" pattern = "Hello World".replace(" ", "\s+?") match = re.search(pattern, test_string) print(match.group())
内容的提问来源于stack exchange,提问作者Muhammad Samadzade
相关产品推荐
相关产品推荐

