RegEx:删除模式及其后的所有内容

时间:2018-01-17 13:09:35

标签: regex alteryx

我有标签<p></p>的字符串我想在标签之间获取所有内容,而不是标签本身。

我已经让RegEx的一半工作了:^[^_]*<p>这给了我一个开始,但我还需要另一个RegEx来摆脱</p>

2 个答案:

答案 0 :(得分:2)

如果标记p具有任何属性(例如<p class="foo">),您可能需要取代<p.*?>右侧的部分。在这种情况下,您不能使用lookbehind运算符,因为所涉及的表达式没有固定的长度(前瞻操作符没有这样的限制,尽管这在这里没有任何区别)。另一方面,保持运算符\K在任何表达式之后都能正常工作。

因此,Nahuel的答案可以改进如下(不包括包含换行符的观察结果)

    <p.*?>\K.*?(?=<\/p>)

答案 1 :(得分:1)

使用lookbehind和lookahead来保持标记不匹配并使用/s修饰符。匹配新线

(?<=<p>).*?(?=</p>)

否则不使用/ s修饰符

(?<=<p>)[\s\S]*?(?=</p>)

因为如果使用\ K可以缩短perl,仍然可以防止匹配

<p>\K.*?(?=</p>)