使用Notepad++正则表达式将URL中的下划线替换为短横线

3
我将翻译以下内容:

好的,我有多个静态HTML页面,在每个HTML页面中,URL后面都带有下划线,我想用破折号替换所有带有下划线的URL。以下是实际代码:

1)

<a href="/category/how_to_tell_your_dad_that_you_are_pregnant/index.html">How to tell my dad that i am pregnant</a>

2)

< href="/premarital_sex/index.html">Premarital Sex</a>

should be

1)

<a href="/category/how-to-tell-your-dad-that-you-are-pregnant/index.html">How to tell my dad that i am pregnant</a>

2)

< href="/premarital-sex/index.html">Premarital Sex</a>

我希望能替换所有静态HTML文件中的URL,我该怎么做呢?或者这是否可能?
我尝试过使用htaccess,但没有成功,所以我只能使用Notepad ++或PowerGrep,但我不确定如何开始或从哪里开始 :(
提前感谢大家。
编辑:
我想我接近了:
(href=")*[_](.+?">)

首先,你选择的 url 真是太有趣了。 - rock321987
来吧,伙计们 :P 我真的需要帮助...这个正则表达式问题。 - mark ong
@markong:帮助并不等于为你做所有事情。至少尝试一些东西,分享你遇到的问题,我们很乐意为你解决这个问题。 - Wiktor Stribiżew
是的,像这样: 查找内容:(href =“ [^”]*?)_ 替换为:\1-有一个注意事项:您需要多次单击替换。 - Tamas Rev
@tamas rev 谢谢,但它似乎只能找到第一个下划线,如果有多个下划线怎么办?感谢 yiu。 - mark ong
显示剩余3条评论
2个回答

3

如果在Notepad++和Sublime Text中缺少无限宽度的后顾断言,您可以轻松解决此问题,只需使用\G运算符即可。

使用方法:

(\bhref="|(?!^)\G)[^"<_]*\K_

将其替换为-

enter image description here

解释:

  • (\bhref="|(?!^)\G) - 定义匹配的最左边界:应该匹配一个整个单词href="\b是单词边界),或者匹配前一次成功匹配的结束位置(使用(?!^)\G
  • [^"<_]* - 匹配除了"<_之外的0个或多个字符
  • \K - 从缓冲区中省略我们到目前为止匹配的整个文本
  • _ - 只匹配这个字符,只有这个字符会被替换。

不需要点击10次,只需一次点击“全部替换”。 - Wiktor Stribiżew
哦,我的天啊:))这就是我正在寻找的解决方案..太完美了,多么聪明。 - mark ong

1
你需要另一个支持可变长度回溯的编辑器。Notepad++不支持。
因此,使用智能编辑器(例如Sublime),您可以一次性完成以下操作: 查找:(?<=href="[^"]*)_(?=[^"]*")并将其替换为:-
在Notepad++中,您可以执行以下操作: 查找:(href="[^"]*)_(?=[^"]*")并将其替换为:\1-。但是您必须多次单击“全部替换”。即具有最多下划线的URL有10个,则必须单击10次。

这里不需要无限宽度的回顾。有一种方法可以在不使用该结构的情况下完成它。 - Wiktor Stribiżew
我在Sublime和Notepad++上都遇到了“无效的后顾引用”错误。我正在使用正则表达式进行查找。 - mark ong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接