RegEx用于在破折号和数字之间添加零

时间:2019-05-04 17:34:21

标签: regex

我想找到一种在数字前添加前导零“ 0”的方法,但是BBEdit认为它可以替代#10示例:

原始字符串:视频2-1:标题在此处

期望的结果:视频2-01:标题在这里

我找到的正则表达式为:(-)(\d:)

我的替换正则表达式为:\10\2。第一个替代不是10。我只是打算替换第一个位置,然后添加“ 0”,然后替换第二个位置。

请告诉我如何告诉BBEdit我想加一个零,而不是第10位。

4 个答案:

答案 0 :(得分:2)

您真的不需要在组1中捕获连字符(因为它是固定的字符串,因此在组1中没有捕获任何益处并用package ch.yourclick.zt; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet("/login") public class Login extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter out = resp.getWriter(); out.print(req.getParameter("username")); } } 进行替换),而只需使用{{1}用数字捕获连字符},而在替换时只需使用\1

Regex Demo

此外,还有其他更好的方法可以进行替换,而您根本不需要处理反向引用。

另一种替代解决方案是使用这种基于外观的正则表达式,

-(\d+:)

,然后仅将其替换为-0\1(?<=-)(?=\d+:) 会在数字前插入一个零。

Regex Demo with lookaround

当不支持lookbehind时的另一个替代解决方案(例如在EcmaScript2018之前的Javascript中),您可以使用基于正向前瞻性的解决方案。基本上将连字符0匹配,然后使用此正则表达式将数字和冒号匹配

-

并将其替换为-(?=\d+:)

Regex Demo with only positive look ahead

答案 1 :(得分:1)

如果您只需要一个带破折号的数字,那么我建议对此后面使用正则表达式。

尝试一下:

(?<=-)(\d+:)

如此处所示:regex101.com

它告诉正则表达式,匹配项前应加上破折号-,而-本身将不匹配!

答案 2 :(得分:0)

尝试使用\1\x30\2作为替代。 \x300字符的十六进制转义,因此替换是\1,然后是0,然后是\2,并且不能解释为{{1 }},然后\10。我不知道BBEdit是否在替换字符串中支持十六进制转义。

答案 3 :(得分:-1)

如果Video 2-是固定输入,

This expression可能会帮助您:

(Video 2-)(.+)

如果还有其他实例,则可以向此表达式添加左边界,也许类似于this

([A-Za-z]+\s[0-9]+-)(.+)

然后,您可以在捕获组$1之后将其替换为前导零:

enter image description here

此图显示了表达式的工作方式:

enter image description here

如果愿意,可以在表达式中添加其他边界。

替换

要进行替换,您可以在程序{kbd> $ 1 和 $ 2 之间使用\U0030\x30而不是零(无论程序支持什么)。 。