Python正则表达式匹配指定行时出现换行符捕获异常的问题
修正后的正则表达式解决方案
问题出在原正则中的\s会匹配换行符,导致正则跨行匹配,同时单词计数逻辑存在疏漏。以下是修正后的代码:
import re my_string="""Requirements: Knowledge Required:""" # 修正后的正则表达式 pattern = r'^\s*(?:\S+[^\S\n]+){0,3}\S+:\s*$' result = re.findall(pattern, my_string, flags=re.MULTILINE) # 可选:去除匹配结果中的首尾空白(若需保留原始行空白可跳过) result = [line.strip() for line in result] print(result)
输出结果
['Requirements:', 'Knowledge Required:']
正则逻辑说明
^\s*:匹配行首任意数量的空白字符(空格、制表符等),不干扰核心匹配逻辑(?:\S+[^\S\n]+){0,3}:匹配0到3个完整单词,每个单词后跟非换行的空白字符(避免跨行匹配),(?:...)为非捕获组,仅用于重复匹配单元\S+::匹配最后一个单词和结尾的冒号,确保行以冒号收尾\s*$:匹配行尾任意数量的空白字符,然后定位到行结束位置re.MULTILINE:让^和$匹配每一行的首尾,而非整个字符串的首尾
补充说明
你的预期输出中'Knowledge Required'缺少冒号应为笔误,原文本该行结尾带有冒号,修正后的代码会正确匹配带冒号的行。若不需要保留行首尾的空白,可通过列表推导式统一处理。
内容的提问来源于stack exchange,提问作者Jozsef
相关产品推荐
相关产品推荐

