如何捕获 "closest" 组(正则表达式)?
How to capture the "closest" group (regex)?
我认为最好是举例说明。
我正在解析如下内容(PDF 内容中的矩形和文本定义):
---
---
85.039 42.52 42.519 42.52 re
W--
---
---
127.559 42.52 42.519 42.52 re
W--
---
---
170.078 42.52 42.52 42.52 re
W--
---
---
BT
---
Text
---
ET
---
---
170.078 42.52 42.52 42.52 re
W--
---
---
127.559 42.52 42.519 42.52 re
W--
---
---
BT
---
Text
---
ET
---
---
170.078 42.52 42.52 42.52 re
W--
---
---
BT
---
Text
---
ET
---
---
Dashes for example only, in the real data dashes can be anything (various control characters / numerics / matrices / whatnot).
目前我正在捕获这些组:
# Clipping Rectangle
(?<x>\b[-0-9\.]+\b)(\s)
(?<y>\b[-0-9\.]+\b)(\s)
(?<width>\b[-0-9\.]+\b)(\s)
(?<height>\b[-0-9\.]+\b)(\s)
(re\nW)
(.*?)
# Text
(BT)
(?<text>.*?)
(ET)
但是在这些匹配中,捕获的是第一个(最远的)剪辑矩形而不是最后一个(最近的)。
如何使用 Regex 捕获最接近文本组 的剪辑组?
我有这个:
但我想要这个:
更新:参见 Regex101。
您可以在 .*?
匹配中的每个字符之后为后跟 re\nW
的 4 个数字添加否定前瞻,以排除该模式在与文本匹配之前再次出现:
# Clipping Rectangle
(?<x>\b[-0-9\.]+\b)(\s)
(?<y>\b[-0-9\.]+\b)(\s)
(?<width>\b[-0-9\.]+\b)(\s)
(?<height>\b[-0-9\.]+\b)(\s)
(re\nW)
((?:.(?!(\b[-\d.]+\b\s){4}re\nW))*?)
# Text
(BT)
(?<text>.*?)
(ET)
我认为最好是举例说明。
我正在解析如下内容(PDF 内容中的矩形和文本定义):
---
---
85.039 42.52 42.519 42.52 re
W--
---
---
127.559 42.52 42.519 42.52 re
W--
---
---
170.078 42.52 42.52 42.52 re
W--
---
---
BT
---
Text
---
ET
---
---
170.078 42.52 42.52 42.52 re
W--
---
---
127.559 42.52 42.519 42.52 re
W--
---
---
BT
---
Text
---
ET
---
---
170.078 42.52 42.52 42.52 re
W--
---
---
BT
---
Text
---
ET
---
---
Dashes for example only, in the real data dashes can be anything (various control characters / numerics / matrices / whatnot).
目前我正在捕获这些组:
# Clipping Rectangle
(?<x>\b[-0-9\.]+\b)(\s)
(?<y>\b[-0-9\.]+\b)(\s)
(?<width>\b[-0-9\.]+\b)(\s)
(?<height>\b[-0-9\.]+\b)(\s)
(re\nW)
(.*?)
# Text
(BT)
(?<text>.*?)
(ET)
但是在这些匹配中,捕获的是第一个(最远的)剪辑矩形而不是最后一个(最近的)。
如何使用 Regex 捕获最接近文本组 的剪辑组?
我有这个:
但我想要这个:
更新:参见 Regex101。
您可以在 .*?
匹配中的每个字符之后为后跟 re\nW
的 4 个数字添加否定前瞻,以排除该模式在与文本匹配之前再次出现:
# Clipping Rectangle
(?<x>\b[-0-9\.]+\b)(\s)
(?<y>\b[-0-9\.]+\b)(\s)
(?<width>\b[-0-9\.]+\b)(\s)
(?<height>\b[-0-9\.]+\b)(\s)
(re\nW)
((?:.(?!(\b[-\d.]+\b\s){4}re\nW))*?)
# Text
(BT)
(?<text>.*?)
(ET)