正则匹配问题:如何匹配指定开头且以分号+可选空白+换行结尾的文本
正则表达式修正方案
要解决值中包含分号导致匹配提前终止的问题,我们可以调整正则逻辑,不再用否定式排除分号,而是通过非贪婪匹配+明确的结束标志来定位每个value块的边界:
修正后的正则表达式
pattern = r'''[ ]+(value \w+)\n([\s\S]+?);[ \t]*\n'''
关键逻辑说明
[ ]+(value \w+)\n:匹配开头的前置空格,捕获value后跟的标识符,匹配到换行结束这一行。([\s\S]+?):[\s\S]匹配所有字符(包括换行和分号),+?是非贪婪模式,会尽可能少地匹配字符,直到遇到后面的结束标志。;[ \t]*\n:明确匹配块的结束标志——分号,后跟可选的空格/制表符,最后是换行符。这就确保只有块末尾的分号才会触发匹配终止,不会被值内的分号干扰。
测试验证
用你提供的带内部分号的示例文本测试:
value Y1N5NALC 1 = 'Yes' 5 = 'No;Maybe' 7 = 'Not ascertained' ;
这个正则会正确捕获:
- 第一捕获组:
value Y1N5NALC - 第二捕获组:所有键值对内容(包括
No;Maybe里的分号)
内容的提问来源于stack exchange,提问作者Hooked
相关产品推荐
相关产品推荐

