如何使用正则表达式提取cite标签内的逗号分隔字符串
实现方案
你可以通过两种逻辑实现需求,分别是兼容性更好的两步处理法,以及单正则一步匹配法:
方案1:两步处理法(推荐)
逻辑拆分清晰,对所有正则环境都兼容:
- 第一步先用你已知的正则
r'cite{(.+?)}'全局匹配所有cite{}块,提取出大括号内的原始字符串,示例中你会得到AA,BBB, C和EE,F两个结果 - 第二步对每个提取到的字符串,按逗号拆分后去除每个条目的前后空格即可
代码示例(Python)
import re input_str = "cite{AA,BBB, C} skip{DD} cite{EE,F}" # 提取所有cite块内的内容 cite_contents = re.findall(r'cite{(.+?)}', input_str) output = [] for content in cite_contents: # 拆分逗号并去除前后空格 items = [item.strip() for item in content.split(',')] output.extend(items) # 打印结果 for item in output: print(item)
运行后即可得到你需要的输出格式。
方案2:单正则一步匹配
如果你的运行环境支持可变长度正向后视(比如Python3.7+、Java等),可以直接用一条正则匹配到所有目标条目:
正则表达式为:r'(?<=cite{[^}]*)\s*([^,}]+?)\s*(?=[,}])'
正则含义说明
(?<=cite{[^}]*):正向后视限定匹配位置必须在cite{之后、}之前,确保只匹配cite块内的内容\s*:匹配条目前的可选空格([^,}]+?):匹配非逗号、非}的内容,也就是你需要的条目\s*(?=[,}]):正向前视限定匹配位置后面要么是逗号要么是},同时跳过条目后的可选空格
代码示例(Python)
import re input_str = "cite{AA,BBB, C} skip{DD} cite{EE,F}" output = re.findall(r'(?<=cite{[^}]*)\s*([^,}]+?)\s*(?=[,}])', input_str) for item in output: print(item)
内容的提问来源于stack exchange,提问作者user42298
相关产品推荐
相关产品推荐

