【问题标题】:RegEx: Remove pattern and everything after it正则表达式:删除模式及其之后的所有内容
【发布时间】:2018-06-26 09:15:42
【问题描述】:

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

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

【问题讨论】:

    标签: regex alteryx


    【解决方案1】:

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

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

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

    【讨论】:

    • 这很优雅。谢谢/
    • 很好,但是因为 > 是一个字符 [^&gt;]* 将比 p 标签内的 .*? 更有效
    【解决方案2】:

    使用lookbehind 和lookahead 使标签不匹配,并使用/s 修饰符,这样。也匹配换行符

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

    否则没有 /s 修饰符

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

    因为如果 perl 可以使用 \K 缩短,仍然要保持不匹配

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

    【讨论】:

    • 嗨纳韦尔。我将您的第一个表达式更改为 (?)(.*)?(?=) 这样它为 Alteryx 创建了一些东西来知道要解析什么。谢谢它有效!
    • (.*)?.*? 懒量词see regex101 link 不是一回事,也许你的意思是(.*?)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多