regex 匹配除后跟换行符的字符外的所有内容

iyfamqjs  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(133)

这看起来像是一个简单的匹配,但是我不知道如何匹配所有以已知文本块开头并以分号+换行符结尾的文本。

pattern = r'''[ ]+(value \w+\n)([^;]+)'''

下面是一段允许我解析的示例文本:

value Y1N5NALC
      1 = 'Yes'  
      5 = 'No'  
      7 = 'Not ascertained' ;
   value AGESCRN
      15 = '15 years'  
      16 = '16 years';

然而,如果任何键/值对在字符串 * 中包含分号 *,匹配就会提前失败,因为正则表达式正在寻找任何分号。

value Y1N5NALC
      1 = 'Yes'  
      5 = 'No;Maybe'  
      7 = 'Not ascertained' ;

我想要做的是通过寻找semicolon + Optional(space or tab) + newline来结束匹配。使用([^;\n]+)失败,因为换行符得到了负的匹配。

qni6mghb

qni6mghb1#

您可以使用

(?sm)^ +(value \w+\n)(.*?);$

请参见regex demo

  • 详细信息 *:
  • (?sm)-re.Sre.M打开
  • ^-行的开始
  • +-一个或多个空格
  • (value \w+\r?\n)-第1组:value、空格、一个或多个单词字符和LF换行符
  • (.*?)-第2组:
  • ;-一个;
  • $-在一行的末尾。

如果可以有CRLF结尾,则需要

(?sm)^ +(value \w+\r?\n)(.*?);\r?$

相关问题