【问题标题】:Match Regex except Regex匹配除正则表达式外的正则表达式
【发布时间】:2019-09-18 07:49:29
【问题描述】:

我有这样的文字:

22 <a data-event="event:noted:tasks" class="btn btn-default show-if-closed" title="Noted Tasks">
25 <a data-event="event:until-today" class="btn btn-default show-if-closed" title="Until Today">
28 <a data-event="event:until-one-week" class="btn btn-default show-if-closed" title="Until One Week">
31 <a data-event="event:until-one-month" class="btn btn-default show-if-closed" title="Until One Month">

现在我想替换除标题标签内的字符串之外的整个文本。

替换文本后,我想得到这样的行:

Noted Tasks
Until Today
Until One Week
Until One Month

除了标题值之外,我需要什么正则表达式模式来匹配文本?模式应该是通用的,不限于a-Tags

【问题讨论】:

  • 使用HTML解析器,选择所有a并获取title属性值
  • 我想用像 gedit 这样的编辑器来做这个。
  • 一行中是否可以有多个"title="?

标签: regex regex-negation


【解决方案1】:

使用以下正则表达式:

^.*?title="([^"]*)".*$

并替换为\1。这样一来,整行都将替换为所需的信息。

测试here


请注意,最好使用适当的 HTML 解析器来...啊哼...解析 HTML。


模式应该是通用的,不限于a-Tags

考虑到单词title 可以出现在网页上的任何位置(普通文本、类名、关键字...),从长远来看,只有专用的 HTML 解析器才能为您提供帮助。

【讨论】:

  • 第 1 组和第 3 组没用。
  • 这正是我写and replace \1 and \3 with nothing的原因。 OP 正在寻找搜索并替换/删除无用的数据,而不是寻找有用的数据。
  • 这不是重点,我说你不需要捕获行的开头和结尾,它非常低效并且会减慢进程。
  • 通常,搜索title="([^"]*)" 就足够了,捕获\1。但 OP 要求不同的东西。还是我误会了你?
  • 查找:^.*?title="([^"]*)".*$ 替换:$1 效率更高,只有 1 个捕获组。
猜你喜欢
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 2010-11-06
  • 2017-03-04
相关资源
最近更新 更多