正则表达式:多匹配场景下如何匹配正向预查前的目标内容?
解决正则匹配DOB上一行内容的问题
你的正则(?P<name>a-zA-Z)(?=DOB)无法成功匹配的原因有两个:
a-zA-Z没有量词限定,只能匹配单个字母,无法匹配多字母组成的ijk;- 未考虑目标行与
DOB之间的换行和空白字符,直接断言紧跟DOB不符合文本结构。
正确的正则表达式
使用正向预查匹配目标行,同时忽略中间的空白与换行:
(?P<name>[a-zA-Z]+)(?=\s*\n\s*DOB)
正则解释
[a-zA-Z]+:匹配一个或多个英文字母,对应你需要提取的ijk;(?=\s*\n\s*DOB):正向预查断言,确保匹配内容后紧跟任意数量的空白字符(含空格、换行)、一个换行符、再任意空白字符,最后是DOB,以此跳过目标行和DOB之间的空行。
示例代码(Python)
import re text = """abcd defgh ijk DOB""" result = re.search(r'(?P<name>[a-zA-Z]+)(?=\s*\n\s*DOB)', text) if result: print(result.group('name')) # 输出:ijk
内容的提问来源于stack exchange,提问作者Akash Kp
相关产品推荐
相关产品推荐

