我想找到一种在数字前添加前导零“ 0”的方法,但是BBEdit认为它可以替代#10示例:
原始字符串:视频2-1:标题在此处
期望的结果:视频2-01:标题在这里
我找到的正则表达式为:(-)(\d:)
我的替换正则表达式为:\10\2
。第一个替代不是10。我只是打算替换第一个位置,然后添加“ 0”,然后替换第二个位置。
请告诉我如何告诉BBEdit我想加一个零,而不是第10位。
答案 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
此外,还有其他更好的方法可以进行替换,而您根本不需要处理反向引用。
另一种替代解决方案是使用这种基于外观的正则表达式,
-(\d+:)
,然后仅将其替换为-0\1
,(?<=-)(?=\d+:)
会在数字前插入一个零。
当不支持lookbehind时的另一个替代解决方案(例如在EcmaScript2018之前的Javascript中),您可以使用基于正向前瞻性的解决方案。基本上将连字符0
匹配,然后使用此正则表达式将数字和冒号匹配
-
并将其替换为-(?=\d+:)
答案 1 :(得分:1)
如果您只需要一个带破折号的数字,那么我建议对此后面使用正则表达式。
尝试一下:
(?<=-)(\d+:)
如此处所示:regex101.com
它告诉正则表达式,匹配项前应加上破折号-
,而-
本身将不匹配!
答案 2 :(得分:0)
尝试使用\1\x30\2
作为替代。 \x30
是0
字符的十六进制转义,因此替换是\1
,然后是0
,然后是\2
,并且不能解释为{{1 }},然后\10
。我不知道BBEdit是否在替换字符串中支持十六进制转义。
答案 3 :(得分:-1)
Video 2-
是固定输入,This expression可能会帮助您:
(Video 2-)(.+)
如果还有其他实例,则可以向此表达式添加左边界,也许类似于this:
([A-Za-z]+\s[0-9]+-)(.+)
然后,您可以在捕获组$1
之后将其替换为前导零:
此图显示了表达式的工作方式:
如果愿意,可以在表达式中添加其他边界。
要进行替换,您可以在程序{kbd> $ 1 和 $ 2 之间使用\U0030
或\x30
而不是零(无论程序支持什么)。 。