【问题标题】:Notepad++ Regex replace HyphensNotepad++ 正则表达式替换连字符
【发布时间】:2015-09-28 07:46:10
【问题描述】:

我有一个 HTML 并且 alt 标签是这种格式:

alt="something-nice-and-beautiful"

如何将所有连字符 - 替换为仅在 alt 标签之间的空格?

【问题讨论】:

    标签: regex replace notepad++ hyphen


    【解决方案1】:

    我仍然在思考这个问题。我的第一个倾向是说用这个作为搜索

    (alt="[^"]*?)\-(.*?")

    然后替换为\1 \2。每次运行时,它会将一个连字符替换为一个空格,继续执行 Replace All 直到没有匹配项。如果我想得更多,我可能会想出一个更优雅的解决方案,但这很有效。

    【讨论】:

    • 我认为该表达式也可能匹配引号之外的一些破折号。这可能更安全(如果它是有效的 notebook++ 正则表达式语法) 查找:(alt="[^-"]*)- 替换:$1
    • 它有效,非常感谢!但就像你说的,只需多次点击“全部替换”
    • 为避免重复此活动,如果您有固定数量的标签,如本例中的 3 个,那么您可以使用 (alt="[0-9 A-Z a-z]*)\-(.*)\-(.*)\-(.*) 表达式替换为 $1 $2 $3 $4 这将替换所有 3 个连字符一枪。
    • @HåkenLid 不,.*? 中的问号告诉它采用最短的匹配,这保证了第二组在它找到的第一个双引号处停止匹配。因此,我们不必担心匹配会超出 alt 属性的末尾。
    • @HåkenLid - 是的!你真是个天才!我以前没见过。很好的例子。基于此,我将正则表达式更改为(alt="[^"]*?)\-(.*?")。现在应该通过这个例子,如果你想出另一种方法来打破它,请告诉我。
    【解决方案2】:

    在源表达式中(确保启用.* 正则表达式按钮)。由于这不适用于单个表达式,因此我会这样做(当然,假设您的标签最多具有可管理的长度!)

    搜索:

    (?<=alt=")(\w+)-(?=")
    

    替换为:

    $1
    

    然后再次搜索/替换,添加(\w+)-

    (?<=alt=")(\w+)-(\w+)-(?=")
    $1 $2
    

    再说一遍:

    (?<=alt=")(\w+)-(\w+)-(\w+)(?=")
    $1 $2 $3
    

    ...

    (?<=alt=")(\w+)-(\w+)-(\w+)-(\w+)(?=")
    $1 $2 $3 $4
    

    添加额外的单词以确保替换所有标签。

    【讨论】:

      猜你喜欢
      • 2012-04-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      相关资源
      最近更新 更多