如何使用Regex从空格分隔的列表中提取第三个元素
正则表达式实现方案
核心正则写法
方案1:通用捕获组写法(兼容所有正则引擎)
正则表达式为:^(\S+\s+){2}(\S+)
直接取第2个捕获组的内容,就是每行的第三个元素。
规则说明:
^:匹配每一行的起始位置,需要开启多行匹配模式(正则的m修饰符)(\S+\s+){2}:\S+匹配单个不带空格的元素内容,\s+匹配元素之间的1个或多个空格/空白符,{2}表示重复匹配2次,也就是跳过前2个元素和它们后面的分隔空白(\S+):匹配第三个不带空格的元素,存入第2个捕获组
方案2:环视匹配写法(支持正向环视的引擎可用,比如PCRE、Python re、Java等)
正则表达式为:(?<=^(\S+\s+){2})\S+
该写法可以直接匹配到第三个元素,不需要额外提取捕获组,匹配结果就是目标内容。
使用示例(Python环境)
import re input_text = """phrase1 phrase2 phrase3 phrase4 phrase5 phrase6""" # 用环视写法直接提取结果 result = re.findall(r'(?<=^(\S+\s+){2})\S+', input_text, flags=re.MULTILINE) print(result) # 输出:['phrase3', 'phrase6']
注意事项
- 必须开启多行匹配模式,否则
^只会匹配整个文本的开头,仅能返回第一行的第三个元素 - 以上写法默认元素本身不包含空格,如果元素允许带空格,需要明确元素的分隔规则后再调整正则
内容的提问来源于stack exchange,提问作者VladimirB
相关产品推荐
相关产品推荐

