【问题标题】:Regex: Select the content of tags without some words, until |正则表达式:选择没有某些单词的标签内容,直到 |
【发布时间】:2017-03-18 12:31:33
【问题描述】:

我有更多标签。我想选择他们的内容而不用一些词,并用别的东西代替。例如:

<title>WORD_1 WORD_2 | Blahhhhhh<title>

<title>WORD_3 WORD_4<title>

<title>WORD_5 WORD_6<title>

<title>WORD_7 WORD_8 | Dammmmmm <title>

替换的愿望选择:

  • WORD_1 WORD_2
  • WORD_3 WORD_4
  • WORD_5 WORD_6
  • WORD_7 WORD_8

或者,换句话说,我想选择标签的所有内容直到第二部分(直到|

【问题讨论】:

  • 你使用什么语言?
  • 记事本++窗口

标签: regex


【解决方案1】:

您可以使用以下 regex ...

完成此操作
(?<=<title>).*?(?=\||<title>)
  • (?&lt;=&lt;title&gt;) 在后面寻找 &lt;title&gt;
  • .*? 匹配任何字符
  • (?=\||&lt;title&gt;) 期待|&lt;title&gt;

regex demo

编辑 1:

只保留单词直到| 并删除所有标签...

搜索: .*?(?&lt;=&lt;title&gt;)(.*?)(?=\||&lt;title&gt;).*

替换为: $1

编辑 2:

只保留|之后的文字并删除所有标签...

搜索: .*?(?&lt;=\|)(.*?)(?:\||&lt;title&gt;)

替换为: $1

【讨论】:

  • 反之亦然?如果我只想保留单词直到| 并删除所有 标签?
  • 再一次,最后一种情况,如果我想删除所有标签并只保留| 之后的单词?
  • 不,最后一个正则表达式不起作用。也许你忘了选择第一个打开的标签?
  • @RobRob 是的,它确实有效。你也想替换&lt;title&gt;WORD_3 WORD_4&lt;title&gt;&lt;title&gt;WORD_5 WORD_6&lt;title&gt; 吗?
  • 是的,当然,哦,男孩。我忘了在我的例子中写,| 之后有 2 个单词,而不仅仅是像 Blahhhhhh 这样的单词。所以,如果| 之后只有一个词,那么您的正则表达式就可以工作。但是如果|后面有很多字呢?
【解决方案2】:

虽然前面的答案很好,但我建议更快(优化)正则表达式模式:

(<title>).+?(?=\||<title>)

https://regex101.com/r/8gCnCy/1


性能对比:

带有 PHP(PCRE) 风格:

(&lt;title&gt;).+?(?=\||&lt;title&gt;) - 4 个匹配项,260 步(~229ms)

(?&lt;=&lt;title&gt;).*?(?=\||&lt;title&gt;) - 4 个匹配项,433 步(~288ms)


带有Python风格:

(&lt;title&gt;).+?(?=\||&lt;title&gt;) - 4 个匹配项,370 步(~270ms)

(?&lt;=&lt;title&gt;).*?(?=\||&lt;title&gt;) - 4 个匹配项,973 步(~529ms)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多