问题
我正在尝试从文本文件中检索信息,但正在努力检索“ Rationale”字段的内容: 确实,我的问题是我想忽略模式: List Paragraph \ txx)(用x表示数字)。 但是,有些行以 List Paragraph \ t(x)开头。 简而言之,如果列表段落\ t之后的字符不是“(”,我想忽略数字 xx),但是如果后面跟着“(”,则现在开始捕获。 (请参见下面的“预期结果”部分)
文本
List Paragraph 36) Rationale-1 - Details on the context:
List Paragraph 37) None.
Normal
List Paragraph 38) 2 - Statement complements:
List Paragraph 39) Blablablabla
List Paragraph (1) Blablablabla
List Paragraph (2) Blablablabla
List Paragraph (3) Blablablabla
List Paragraph (4) Blablablabla
List Paragraph (5) Blablablabla
List Paragraph (6) Blablablabla
List Paragraph (7) Blablablabla
Normal
List Paragraph 40) Blablablabla
Normal
List Paragraph 41) 3 - Statement justification:
List Paragraph 42) Blablablabla
Normal
List Paragraph 43) Blablablabla
List Paragraph 44) Blablablabla
List Paragraph 45) Blablablabla
List Paragraph 46) Attached Files: Rationale-
Normal
首先,我正在使用此正则表达式捕获“ Rationale-”之后的所有内容,直到“ List Paragraph \ t46)Attached Files:Rationale-”之前的最后一个字符:
^List\sParagraph\t\d+\)\sRationale-([\s\S]+?)(?=^List\sParagraph\t\d+\)\sAttached\sFiles:\sRationale-)
有了这个,我有以下内容:
1 - Details on the context:
List Paragraph 37) None.
Normal
List Paragraph 38) 2 - Statement complements:
List Paragraph 39) Blablablabla
List Paragraph (1) Blablablabla
List Paragraph (2) Blablablabla
List Paragraph (3) Blablablabla
List Paragraph (4) Blablablabla
List Paragraph (5) Blablablabla
List Paragraph (6) Blablablabla
List Paragraph (7) Blablablabla
Normal
List Paragraph 40) Blablablabla
Normal
List Paragraph 41) 3 - Statement justification:
List Paragraph 42) Blablablabla
Normal
List Paragraph 43) Blablablabla
List Paragraph 44) Blablablabla
List Paragraph 45) Blablablabla
现在,我不知道如何获得预期的结果...
预期结果
1 - Details on the context:
None.
2 - Statement complements:
Blablablabla
(1)Blablablabla
(2)Blablablabla
(3)Blablablabla
(4)Blablablabla
(5)Blablablabla
(6)Blablablabla
(7)Blablablabla
Blablablabla
3 - Statement justification:
Blablablabla
Blablablabla
Blablablabla
Blablablabla
我该如何解决这个问题?
答案 0 :(得分:1)
一个选项可能是选择所需的所有内容并替换为空字符串:
^(?:.*?\bRationale-|Normal|List Paragraph\t(?:\d+\)[ \t]*)?)[ \t]*
^
字符串的开头(?:
非捕获组
.*?\bRationale-
匹配任意char的0+倍,除换行符非贪婪外,并匹配单词边界和Rationale-
|
或Normal$
匹配Normal并断言字符串的结尾|
或List Paragraph\t
匹配List Paragraph
和制表符(?:\d+\)[ \t]*)?
可选部分,用于匹配1个以上的数字,)
后跟0+倍的空格或制表符)
关闭非捕获组[ \t]*
匹配0+次空格或制表符如果您想获得匹配项,则可以通过在模式末尾添加(.*)
来捕获捕获组中的所有后续内容。
如果引擎支持\K
忘记了当前匹配的内容,则可以在其后添加\K.*
。