如何用正则提取字段后的名称字符串?
如何用正则提取字段后的名称字符串?
嗨,我来帮你搞定这个正则提取的问题~
你遇到的情况是要从类似\r\n\r\nName John Smith\r\n的文本里提取“John Smith”,而且“Name”和名称之间的空格在3到8个之间对吧?你之前写的正则(?<=\nName)(.*)(?=\r\n)之所以没生效,是因为它把“Name”后面的所有空格都包含进匹配结果里了,而且没有限制空格的数量范围。
给你两个实用的正则方案,按需选就行:
方案一:用分组直接捕获(兼容性更好)
这个写法几乎所有正则引擎都支持,直接取第一个捕获组的内容就是你要的名称:
Name\s{3,8}(.*)(?=\r\n)
拆解一下各部分的作用:
Name:精准定位字段名\s{3,8}:匹配3到8个空白字符(如果确定只有空格,也可以写成{3,8},\s还能兼容制表符哦)(.*):捕获名称字符串(直到后面的换行符)(?=\r\n):确保匹配到的内容后面紧跟\r\n,不会把换行符包含进去
比如在Python里这么用:
import re text = "\r\n\r\nName John Smith\r\n" match_result = re.search(r'Name\s{3,8}(.*)(?=\r\n)', text) if match_result: print(match_result.group(1)) # 输出:John Smith
方案二:用正向预查直接获取结果(更简洁)
如果你的正则引擎支持正向肯定预查(比如Python 3.6+、JavaScript ES2018+等),可以用这个写法,直接拿到匹配结果就是名称:
(?<=Name\s{3,8})(.*)(?=\r\n)
这个写法里(?<=Name\s{3,8})是正向预查,用来定位到“Name+3-8个空格”之后的位置,后面的(.*)(?=\r\n)就会直接捕获到名称啦。
要是你还有其他特殊情况(比如名称里可能有特殊字符?),随时说哦~
备注:内容来源于stack exchange,提问作者em-steven
相关产品推荐
相关产品推荐

