这看起来像是一个简单的匹配,但是我无法弄清楚如何匹配所有以已知文本块开始并以分号+换行符结束的文本。我现在所拥有的大部分工作:
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]+)
失败,因为换行符匹配到负数。
可以使用
(?sm)^ +(value w+n)(.*?);$
参见regex演示。
细节:
(?sm)
-re.S
和re.M
在^
-行起始+
-一个或多个空格(value w+r?n)
-第1组:value
,空格,一个或多个字符,和一个LF换行(.*?)
-第二组:;
- a;
$
-在行尾
如果可以有CRLF结尾,则需要
(?sm)^ +(value w+r?n)(.*?);r?$