Python正则匹配以www开头且以空格结尾的子串问题求助
精准匹配目标URL子串的正则方案
问题分析
你当前的正则www\.\w+.*\s{1}失效的核心原因是:
.*是贪婪匹配,会尽可能匹配最多的字符,直到字符串末尾的空格才停止,导致匹配范围超出预期;\s{1}仅限制单个空白,但贪婪模式下.*已经吃掉了中间所有内容,无法在目标位置终止。
解决方案
使用非贪婪匹配+正向预查来精准定位终止边界,正则表达式如下:
www\..*?(?= \.)
正则说明
www\.:匹配目标子串的固定开头;.*?:非贪婪模式匹配任意字符(包括换行符,需开启正则的DOTALL模式,比如Python中加re.DOTALL参数,或在正则开头加(?s)),会尽可能少地匹配字符,直到遇到后续的终止条件;(?= \.):正向预查,匹配「空格+句号」的前置位置,确保匹配范围截止到目标内容的末尾,不会包含后续的.。
测试验证
针对你的示例字符串:
available at: www.bankofengland.co.uk/prudential-regulation/\ntransforming-data-collection .\n40. News release ‘Data Collection Transformation Plan’, February 2021: www.bankofengland.co.uk/\nnews/2021/february/data-collection-transformation-plan .\n41. Under Section 166 of the Financial Services and Markets Act 2000.\n42. PRA Letter ‘Letter from
使用该正则会精准匹配到两个目标子串:
www.bankofengland.co.uk/prudential-regulation/\ntransforming-data-collectionwww.bankofengland.co.uk/\nnews/2021/february/data-collection-transformation-plan
注意事项
如果你的正则引擎默认不支持.匹配换行符,需要手动开启DOTALL模式:
- Python:
re.findall(r'www\..*?(?= \.)', input_str, re.DOTALL) - JavaScript:在正则后加
s标志,如/www\..*?(?= \.)/gs
内容的提问来源于stack exchange,提问作者rbrtjwrk
相关产品推荐
相关产品推荐

