如何编写可匹配中文、[NAME]、[PLACE]的正则表达式提取目标内容?
错误原因
你之前的写法错误核心是将[NAME]、[PLACE]直接写入正则字符集[]中,字符集的规则是仅匹配单个字符,你写在里面的括号、N/A/M/E/P/L/A/C等字母都会被当成单独的可匹配字符,因此会出现大量单个字母、括号的无效匹配结果。
正确正则及使用示例
正确的正则需要用分支匹配规则,同时转义占位符中的特殊符号[和],写法如下:r'(?:[一-鿿,]|\[NAME\]|\[PLACE\])+'
完整使用代码:
import re # 示例输入文本 text = "用户[NAME]上周前往[PLACE]出差,<data>这段标签内容会被过滤</data>,返程时间为本周三。" # 执行匹配 Array_of_words = re.findall(r'(?:[一-鿿,]|\[NAME\]|\[PLACE\])+', text) # 过滤空匹配项 Array_of_words = [item for item in Array_of_words if item.strip()] print(Array_of_words) # 输出结果:['用户', '[NAME]', '上周前往', '[PLACE]', '出差,', '返程时间为本周三']
补充说明
如果需要保留更多中文标点(比如句号、问号、感叹号等),直接把对应标点加到中文匹配的字符集里即可,例如把[一-鿿,]改为[一-鿿,。?!;:“”‘’]。
内容的提问来源于stack exchange,提问作者Azornes
相关产品推荐
相关产品推荐

