【问题标题】:Regular expression that can get tag with some text inside可以获取带有一些文本的标签的正则表达式
【发布时间】:2018-01-19 09:40:02
【问题描述】:

这是我的例子:

<w:p>
<w:pPr>
    <w:spacing></w:spacing>
    <w:contextualSpacing/>
    <w:rPr/>
</w:pPr>
<w:r>
    <w:rPr>
        <w:color/>
        <w:rtl w:val="0"/>
    </w:rPr>
    <w:t>Some text</w:t>
</w:r>

<w:r>
    <w:rPr>
        <w:color/>
        <w:rtl/>
    </w:rPr>
    <w:t>My search text</w:t>
</w:r>

<w:r>
    <w:rPr>
        <w:color/>
        <w:rtl/>
    </w:rPr>
    <w:t>Other text</w:t>
</w:r>

我需要用正则表达式来获取这个块:

<w:r>
    <w:rPr>
        <w:color/>
        <w:rtl/>
    </w:rPr>
    <w:t>My search text</w:t>
</w:r>

但我的正则表达式总是先出现&lt;w:r>,最后出现&lt;/w:r&gt;。惰性量词没有帮助。

那么我如何才能获得&lt;w:r&gt; &lt;/w:r&gt; 块内只有“我的搜索文本”?

https://regex101.com/r/2Sh68k/2这里是例子

【问题讨论】:

  • 你试图做什么?它是如何失败的?为什么要使用正则表达式而不是 XML 解析器?
  • 这是我的例子regex101.com/r/2Sh68k/2。关于XML解析器,解析这个xml非常困难(这是来自DOCX格式的xml),所以我想用正则表达式会更容易+我需要只需找到块并用另一个替换他
  • 为什么不直接搜索My search text,上下文相关吗?如果是,请将其添加到表达式中。

标签: regex


【解决方案1】:

这里是修复示例的步骤

<w:r>.+My search text.+<\/w:r>

.+. 周围添加非捕获组无效

<w:r>(?:.)+My search text(?:.)+<\/w:r>

. 之前插入一个否定的前瞻(?!) 以防止下一个匹配字符成为不想要的序列&lt;w:r&gt;&lt;/w:r&gt; 的开始

<w:r>(?:(?!<w:r>|<\/w:r>).)+My search text(?:(?!<w:r>|<\/w:r>).)+<\/w:r>

updated link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2010-12-17
    • 2017-07-24
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多