[英]Java replace every Nth specific character (e.g. space) in String
我正在尝试学习正则表达式,下面的代码用下划线替换每个其他空格,但我试图替换每隔三个空格。
String replace = deletedWords.replaceAll("(?<!\\G\\w+)\\s","_");
防爆。 我得到的结果是:“我已经把这个问题永远地困住了”
防爆。 输出我想要:“我永远忘记了这个问题”
你可以在积极的后卫中使用“最后一场比赛或一线开始”技巧:
String s = "I have been stuck on this problem forever quick brown fox jumps over";
String r = s.replaceAll("(?<=(^|\\G)\\S{0,100}\\s\\S{0,100}\\s\\S{0,100})\\s", "_");
System.out.println(r);
使用后视的不幸后果是您需要为匹配提供最大长度。 我使用{0,100}
代替*
和{1,100}
代替+
。 如果您愿意,可以使用其他限制。
你可以用这个:
String z = "I have been stuck on this problem forever quick brown fox jumps over";
String p = z.replaceAll("(\\s+\\S+\\s+\\S+)\\s+", "$1_");
System.out.println(p);
不需要测试连续性,因为字符串是从左到右解析的,因为字符(包括前两个空格)被消耗掉,所以最后的\\\\s+
位置总是3的倍数。
第n个字符的更一般模式是:
((?:target all_that_is_not_the_target){n-1}) target
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.