如何使用正则提取第二个name ID的对应值作为首个捕获组
正则提取第二个name ID取值的解决方案
直接使用如下正则即可将第二个name ID的取值放入第一个捕获组:
[\s\S]*?name ID:[\s\S]*?name ID:\s*([^\n\r]+)
正则逻辑说明
[\s\S]*?:非贪婪匹配任意字符(包含换行符),用于跳过不需要的前缀内容- 第一个
name ID::定位到第一个姓名标识位,后续继续用[\s\S]*?跳过第一个姓名的内容以及中间的其他文本,直到命中第二个name ID: - 第二个
name ID:\s*:定位到第二个姓名标识位,同时匹配标识后紧跟的任意空白字符(空格、制表符等) ([^\n\r]+):第一个捕获组,匹配所有非换行、非回车的字符,刚好取到当前行的姓名值,示例中即可得到john
如果你的正则引擎支持单行模式(dotall模式,即.可以匹配换行符),也可以简化为如下写法,开启dotall模式后即可生效:
.*?name ID:.*?name ID:\s*([^\n\r]+)
原有写法问题说明
你之前使用的name ID: \s(.*?)\s默认从文本开头从左到右匹配第一个符合规则的片段,因此只会返回第一个name ID的取值andy,没有跳过第一个匹配项的逻辑,自然无法获取到第二个姓名。
内容的提问来源于stack exchange,提问作者Astral Zhang
相关产品推荐
相关产品推荐

