我正在尝试使用正则表达式在2个特定单词之间提取数字。问题在于它们是多行的。我正在尝试从PDF中提取这些内容,因此它只能在这两个词之间
WORD1:
(23)
(56)
(78)
END
我尝试了这个
\((.*?)\)
,它拉出()之间的数字,但我需要它仅在单词 WORD1 和 END 之间搜索,而不是整个PDF。
有办法吗?
Expected Output:
23
56
78
答案 0 :(得分:1)
使用\G
构造
(?s)(?:(WORD1:)(?=(?:(?!WORD1:|END).)*?\d(?:(?!WORD1:|END).)*END)|(?!^)\G)(?:(?!\d|WORD1:|END).)*?\K\d+
https://regex101.com/r/il00WG/1
解释
(?s) # Dot-all inline modifier
(?:
( WORD1: ) # (1), Flag start of new set
(?= # Lookahead, must be a digit before the END
(?:
(?! WORD1: | END )
.
)*?
\d
(?:
(?! WORD1: | END )
.
)*
END
)
| # OR,
(?! ^ )
\G # Start where last match left off
)
(?:
(?! \d | WORD1: | END ) # Go past non-digits
.
)*?
\K # Ignor previous match up to here
\d+ # Digits, the only match
答案 1 :(得分:0)
您需要在正则表达式中包含全局修饰符 gm
,以符合您的需要。
https://regex101.com/r/c3VLdq/1
(\(.*?\))/gm
m用于多行
m
修饰符:多行。使^和$匹配每行的开始/结束
答案 2 :(得分:0)
我有一个类似的问题,我使用的是LookAhead(?=)和LookBehind(?<=) 因此,在您的情况下,它看起来像这样(如果支持Lookbehind)
(?<= WORD1:\ n)(。* \ n)+(?= END) 注意WORD1之后的新行符号:如果省略该符号,您将从换行符开始获得结果