如何编写可提取符合指定首尾规则字符串的Regex正则表达式
符合需求的正则表达式
最终可用正则(需开启单行匹配模式)
^[A-D]\n\n.*?[,.!?]\n\n$
各部分规则说明
^:锚定匹配字符串的起始位置[A-D]:匹配开头要求的A、B、C、D任意一个大写字母,如需兼容小写开头可修改为[A-Da-d]\n\n:匹配开头字母后紧跟的两个连续换行符.*?:非贪婪匹配中间的任意内容,开启单行模式后可匹配换行符,适配多行内容的场景[,.!?]:匹配结尾要求的逗号、句号、感叹号、问号四个符号中的任意一个\n\n:匹配结尾符号后紧跟的两个连续换行符$:锚定匹配字符串的结束位置
常用语言使用示例
Python 示例
import re # 待匹配的目标文本 target_text = "A\n\n这是中间的测试内容,可以是多行\n也可以包含任意字符。\n\n" # 正则规则,(?s) 是内联单行模式标记,无需额外传参数 pattern = r'(?s)^[A-D]\n\n.*?[,.!?]\n\n$' result = re.match(pattern, target_text) if result: print("匹配成功,提取内容:", result.group())
JavaScript 示例
const targetText = "B\n\n这是JS端的测试内容?\n\n"; // s修饰符开启单行模式 const pattern = /^[A-D]\n\n.*?[,.!?]\n\n$/s; const matchResult = targetText.match(pattern); if (matchResult) { console.log("匹配成功,提取内容:", matchResult[0]); }
特殊场景适配
如果需要从大段文本中提取所有符合规则的子串,去掉首尾的^和$锚点即可,正则修改为:(?s)[A-D]\n\n.*?[,.!?]\n\n
内容的提问来源于stack exchange,提问作者Akshay Jain
相关产品推荐
相关产品推荐

