如何编写Regex忽略字符串间多行内容,提取Contact Info分区指定字段
解决方法
正则匹配思路
首先精准定位** Contact Info **分区起始位置,避免误匹配前面Site Info分区的同名字段,再通过非贪婪匹配跳过分区内的无关行,分别捕获四个目标字段的值即可。
可用正则表达式
一次性捕获四个字段(结果对应四个捕获组)
(?s)\*\* Contact Info \*\*.*?Name:\s*([^\n\r]+).*?Address:\s*([^\n\r]+).*?Phone:\s*([^\n\r]+).*?Email:\s*([^\n\r]+)
语法说明:
(?s):开启单行匹配模式,让.可以匹配换行符\*\* Contact Info \*\*:精准匹配Contact Info分区的起始标记,隔离其他分区内容.*?:非贪婪匹配,跳过两个目标字段之间的无关内容([^\n\r]+):捕获当前字段的取值,直到行尾停止匹配
单独提取单个字段的正则
如果需要单独提取某一个字段,可以使用对应正则:
- 提取Contact Info下的Name:
(?s)\*\* Contact Info \*\*.*?Name:\s*([^\n\r]+) - 提取Contact Info下的Address:
(?s)\*\* Contact Info \*\*.*?Address:\s*([^\n\r]+) - 提取Contact Info下的Phone:
(?s)\*\* Contact Info \*\*.*?Phone:\s*([^\n\r]+) - 提取Contact Info下的Email:
(?s)\*\* Contact Info \*\*.*?Email:\s*([^\n\r]+)
匹配效果
用你提供的示例文本测试,捕获结果如下:
- 第1捕获组(Name):ABC
- 第2捕获组(Address):EFG Street
- 第3捕获组(Phone):12345
- 第4捕获组(Email):llcd@gmail.com
内容的提问来源于stack exchange,提问作者Prathibha M
相关产品推荐
相关产品推荐

