HTML代码里遇到thymeleaf表达式需要替换,改为格式保留两位位小数,手动一个个替换太麻烦,想试一下用正则匹配,然后批量替换

<div class="row-item"><span th:text="${info.singleSktPrice}">5470元</span>
</div>

期望的结果是

<div class="row-item"><span th:text="${#numbers.formatDecimal(info.singleSktPrice,1,2)}">5470元</span>
</div>

正则表达式,匹配以“ABC”开头,但不包含开头

(?<=ABC).+

正则表达式,匹配以“XYZ”结尾,但不包含结尾

.+(?=XYZ)

套用到此处,表达式为

(?<=th:text="\$\{).+(?=Price\}")

但是这样写,会有另外一个问题:如果一行里有多个这样的元素,只会匹配到一个。所以,还需要使用正则表达式的懒惰模式,改为:

(?<=th:text="\$\{).+?(?=Price\}")

使用java代码来实现


import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexDemo {public static void main(String[] args) {String parentPath = "D:\\coding\\web\\web-static\\module\\ipo-new-skt";List<File> list = new ArrayList<>();getAllFiles(new File(parentPath), list);list.forEach(e -> {replaceFileTextJdk(e.getPath());});}private static void replaceFileTextJdk(String filePath) {Path path = Paths.get(filePath);try {List<String> lines = Files.readAllLines(path);replaceFunction(lines);Files.write(path, lines, StandardOpenOption.WRITE);} catch (IOException e) {e.printStackTrace();}}static String regex = "(?<=th:text=\\\"\\$\\{)+?[^#](.+?)(Price)(?=\\}\\\")";static Pattern compile = Pattern.compile(regex);private static void replaceFunction(List<String> lines) {for (int i = 0; i < lines.size(); i++) {for (; ; ) {String line = lines.get(i);Matcher matcher = compile.matcher(line);if (matcher.find()) {String group = matcher.group();String r = "#numbers.formatDecimal(" + group + ",1,2)";lines.set(i, matcher.replaceFirst(r));} else {break;}}}}public static void getAllFiles(File dir, List<File> list) {File[] files = dir.listFiles();for (int i = 0; files != null && i < files.length; i++) {if (files[i].isDirectory()) {//这里面用了递归的算法getAllFiles(files[i], list);} else {if (files[i].getName().endsWith("template.html")) {list.add(files[i]);}}}}
}

后来,发现NotePad++有更简单的方法,不需要写这么多代码。。。。。。

notePad++中,可以使用

\1来代表匹配到的第一个括号中的内容,\2代表匹配到的第2个括号中的内容

效果

查找目标

(?<=th:text="\$\{)(.+?)(Price)(?=\}")

替换为

#numbers.formatDecimal\(\1\2,1,2\)

完美实现

正则表达式替换不包含指定头尾相关推荐

  1. 正则表达式 匹配不包含指定字符串的方法

    我们经常会遇到想找出不包含某个字符串的文本,比如我要匹配不含有20211229 和 20211230的字符串. 正则表达式中有(?=a)和(?!a)来表示我们是否需要匹配某个东西. 所以,有需要不匹配 ...

  2. 正则表达式替换和不包含指定字符串

    需求 展示一段文字,段落中有些特殊标记的人名.刊名等,格式大体是:"(作者<刊名>其他)",某个字段可以为空,比如作者为空. 那么对应的正则大体是这样的   '\((. ...

  3. JS安全域名验证,安全域名效验,安全域名检查,正则表达式RegExp检查域名,截取字符串检查域名,检查域名url前缀的域名部分是否包含指定域名

    JS安全域名验证,安全域名效验,安全域名检查,正则表达式RegExp检查域名,截取字符串检查域名,检查域名url前缀的域名部分是否包含指定域名 安全域名列表 var DomainArray=['run ...

  4. 收集正则表达式 文本限制 过滤 替换不包含A标签

    多多益善 大家也可以发一下给我哦 只能输入英文 οnkeyup="this.value=this.value.replace(/[^a-zA-Z]/g,'');" 只能不能输入汉子 ...

  5. EditPlus正则表达式替换字符串详解

    EditPlus正则表达式替换字符串详解 发布时间:April 8, 2007 分类:Regular <PHP 实现多服务器共享 SESSION 数据> <利用javascript在 ...

  6. panda是删除行_pandas删除包含指定内容的行

    Outline 处理数据时,遇到文件中包含一些不需要的数据(行),需要把这些不符合要求的行给删除掉. 例如:该数据中应该都是2000年的数据,但是包含了一些2001年的数据,所以需要把2001年的数据 ...

  7. python不包含某字符_python正则表达式匹配不包含某几个字符的字符串方法

    python正则表达式匹配不包含某几个字符的字符串方法 一.匹配目标 文件中所有以https?://开头,以.jpg|.png|.jpeg结尾的字符串 二.尝试过程 1) 自然想到正则表达式r'(ht ...

  8. 用正则表达式替换html标签,在SQL中用正则表达式替换html标签

    由于数据库的一个表字段中多包含html标签,现在需要修改数据库的字段把html标签都替换掉.当然我可以通过写一个程序去修改,那毕竟有点麻烦.直接在查询分析器中执行,但是MS SQL Server并没有 ...

  9. 关于Javascript正则表达式替换

    正则表达式替换操作 RegExp() replace() 一.正则表达式匹配 RegExp new RegExp(pattern, attributes); / pattern/attributes ...

最新文章

  1. android Theme启动APP闪屏处理
  2. OTSU算法对图像二值化
  3. python汉诺塔游戏_Python实战:搭建汉诺塔小游戏,快和小伙伴一起玩玩吧
  4. linux用cat查看本机ip,linux sh 如何根据出口网关来获取本机出口ip
  5. JS获取URL中GET的参数
  6. sql server 中将datetime类型转换为date,或者time
  7. 神经网络 | Hopfield神经网络(附python源代码)
  8. C语言数组中两个数字之间的最大差的算法(附完整源码)
  9. 趋势发展之人工智能,入行要趁早
  10. 华为上机试题 c语言,华为上机考试题库2017 2017年全国计算机等级考试C语言上机考试题库 -1-20套.doc...
  11. python ssl模块安装_在Windows上安装Python的SSL模块(2.5.4)
  12. 实用的数据可视化工具大集合
  13. OpenStack腾讯云部署_Nova部署
  14. 51单片机编译没错但proteus数码管仿真出现乱码的情况
  15. 利用python如何抓取微博评论?
  16. Parallels Desktop2023最新版免费虚拟机软件
  17. word密码忘了怎么解开
  18. VSP编译工具链安装
  19. 淘宝“1元包邮”促销存陷阱 客户信息被卖家套取并转卖,你知道吗?
  20. Pro Engineer Pro/Toolkit dll工程二次开发设置(Pro Engineer 3.0+Visual Studio 2005(C++))

热门文章

  1. Win10网络硬件支持1000兆,显示只有100兆的解决办法
  2. OpenCV(C++) 使用stereoRectify()、initUndistortRectifyMap()、remap()函数,验证双目标定效果。
  3. 朗科实习期间心得笔记(四)
  4. 攻防世界的杂项入门题之功夫再高也怕菜刀
  5. php中iconv函数使用_字符集转换编码
  6. AI模拟面试官项目实战 | 项目概述
  7. Centos 更改权限和用户组
  8. nginx下开启pathinfo模式
  9. thinkphp5入门【三】pathinfo模式的url访问
  10. 【蓝桥杯第六届省赛题-简易温度采集与控制装置】