正则表达式匹配第几个符号问题

原文链接

先说下需求

现在有类似下面的字符串(只列出部分,实际很多):

object_type,customer,消费者对象
object_type,product,产品对象
object_type,organization,组织对象
object_type,employee,员工对象
object_type,other,其他
wechat_public_account,test,java
wechat_mini_program,test,vue
encrypt_method,noencrypt,不加密

现在想把第一个 , 改为 .
然后想把第二个 , 改为 =


如果是你,你会怎么做?
如果用正则,正则怎么写?

我的方案

采用正则表达式,正则的表达式为:

,(.*)

替换为:

.$1

上面的 $1 就表示第一对小括号匹配到的字符串。 类似的 $2 表示第二对小括号匹配到的字符串

举一反三

现在需求改为:把第二个逗号后的内容 和 第一个第二个逗号之间的内容 位置进行调换,正则表达式怎么写?

匹配的表达式:

,(.*),(.*)

替换为:

,$2,$1

替换后的效果:

替换后的效果:
[外链图片转存中…(img-wCHN8B0W-1672888287517)]

在 Java 中,我们可以使用 `String` 类的 `replaceFirst()` 方法结合正则表达式来替换字符串中的特定内容。为了替换倒数第一个句号,我们首先需要确定字符串中有多少个句点,然后找到并替换最靠后的那个。 下面是一个示例程序: ```java public class Main { public static void main(String[] args) { String originalText = "这是一个测试文本。这是第二个句子。这是第三个句子。"; // 计算句点的数量 int dotCount = (int) originalText.chars() .filter(ch -> ch == '.') .count(); // 确定需要替换的是倒数第几个句点 int replaceIndex = dotCount - 1; if(replaceIndex >= 0 && replaceIndex < dotCount) { // 构造用于替换的正则表达式模式(匹配指定位置的句点) String regex = "(\\.){" + replaceIndex + "}"; // 使用正则表达式和 replaceFirst() 方法替换最后一个句点 String newText = originalText.replaceAll(regex, "新句点"); System.out.println("原始文本: " + originalText); System.out.println("修改后的文本: " + newText); } else { System.out.println("文本中不存在足够多的句点。"); } } } ``` 此段代码会输出: ``` 原始文本: 这是一个测试文本。这是第二个句子。这是第三个句子。 修改后的文本: 这是一个测试文本。这是第二个句子。新句点 ``` 这个例子演示了如何计算给定文本中句点的数量,并通过正则表达式来准确地定位到倒数第一个句点进行替换。请注意,在实际应用中,你可能还需要考虑边界条件以及异常处理,例如当文本中句点不足或不存在时的情况。同时,也可以优化这部分逻辑,使其更简洁高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值