如何编写正则表达式提取两个问题之间的换行分隔答案内容
你现有代码存在三个明显问题:
- 变量名错误,
re.findall里传入的splitext和你定义的文本变量text不一致,首先要修正。 - Python正则默认不支持
.匹配换行符,你写的.*?无法匹配多行的答案内容。 - 正则末尾写的
Question\)和示例里的Question 2 (结构不匹配,会直接匹配失败。
正确实现代码
import re text = """Which feature is not part of the linux system? pipe 2) dirx ls ps Question 2 (""" # 正则匹配问号后到下一行开头的Question之前的内容 match_res = re.search(r'\?\s*(.*?)\s*(?=^Question)', text, flags=re.S | re.M) if match_res: # 拆分内容为列表,同时过滤空行 output = [line.strip() for line in match_res.group(1).split('\n') if line.strip()] print(output)
运行输出结果为:['pipe', '2) dirx', 'ls', 'ps']
正则逻辑说明
\?匹配上一个问题末尾的问号\s*匹配问号后所有空白字符,包括换行、空格(.*?)非贪婪匹配所有内容,碰到后续匹配规则就停止,re.S(也叫re.DOTALL)让.可以匹配换行符,支持多行内容提取(?=^Question)是正向预查规则,只会匹配以行开头的Question,不会把Question本身包含到结果里,搭配re.M(也叫re.MULTILINE)让^可以匹配每一行的开头,避免内容中间出现Question单词导致误匹配
内容的提问来源于stack exchange,提问作者John Anthony
相关产品推荐
相关产品推荐

