【问题标题】:RegEx capture string which has newline upto first instance of (set of) characters正则表达式捕获字符串,该字符串具有换行符,直到(一组)字符的第一个实例
【发布时间】:2018-03-27 06:00:34
【问题描述】:

我正在尝试在以下源字符串中获取字符串的第一个实例

输入字符串

 ><text color="#FFFF00" creationdate="D:20180307100631+04'00'" flags="print,nozoom,norotate" date="D:20180307100652+04'00'" name="a60915a3-1c23-4f6d-b8d4-fbe0dd4890e9" icon="Comment" page="7" rect="351.308000,135.732000,371.308000,153.732000" subject="Sticky Note" title="saddia"
><contents-richtext
><body xmlns="http://www.w3.org/1999/xhtml" xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:APIVersion="Acrobat:9.0.0" xfa:spec="2.0.2"
><p dir="ltr"
><span dir="ltr" style="font-size:10.0pt;text-align:left;color:#000000;font-weight:normal;font-style:normal"
>As agreed with WPO that any unspecific area use GEN</span
><span dir="ltr" style="font-size:11.0pt;text-align:left;color:#1D477B;font-weight:normal;font-style:normal"
>&#xD;</span
><span dir="ltr" style="font-size:11.0pt;text-align:left;color:#000000;font-weight:normal;font-style:normal"
>&#xD;</span

我正在尝试如下检索输出

page="7" rect="351.308000,135.732000,371.308000,153.732000" subject="Sticky Note" title="saddia"
><contents-richtext
><body xmlns="http://www.w3.org/1999/xhtml" xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:APIVersion="Acrobat:9.0.0" xfa:spec="2.0.2"
><p dir="ltr"
><span dir="ltr" style="font-size:10.0pt;text-align:left;color:#000000;font-weight:normal;font-style:normal"
>As agreed with WPO that any unspecific area use GEN</span

这取决于&lt;/span 的第一个实例。

我的正则表达式如下,它正在选择最后一次出现的所需结束字符组:

page="[0-9]+".+subject="(Text Box|Sticky Note)".+((\s+.+)+);&lt;\/span

我对 RegEx 的了解有限,请多多包涵。

sn-p 是输出 XFDF(pdf 注释导出),但它的格式很奇怪,所以我使用了 html 标记来格式化。

【问题讨论】:

  • @TimBiegeleisen 我已经更正了。谢谢!

标签: regex vba xfdf


【解决方案1】:

在下面的正则表达式中,我所做的主要更改是使点变得惰性,这意味着它在点之后的 first 模式处停止。这是为了防止模式在整个文本中只梳理一次。

page="[0-9]+".+?subject="(?:Text Box|Sticky Note)".+?<\/span

Demo

注意小心,为了使上述模式起作用,正则表达式必须在 DOT ALL 模式下完成,这意味着点也匹配换行符。

在没有正式DOT ALL模式的VBA中,我们可以使用[\s\S]模拟它:

page="[0-9]+"[\s\S]+?subject="(?:Text Box|Sticky Note)"[\s\S]+?<\/span

【讨论】:

  • 测试时如何在VBA中设置此模式?
  • @shrivallabha.redij 使用字符类[\s\S] 匹配任何字符。我不是 VBA 专家,但上述模式应该有效。让我更新我的答案。
  • 成功了。非常感谢您的回答!
猜你喜欢
  • 2017-03-19
  • 1970-01-01
  • 2022-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
相关资源
最近更新 更多