我有这个作业问题,需要使用正则表达式删除字符串中的所有其他字符。
在一部分中,我必须删除索引1,3,5,…处的字符,具体操作如下:
String s = "1a2b3c4d5";
System.out.println(s.replaceAll("(.).", "$1"));
这12345
是我想要的打印。本质上,我一次匹配两个字符,然后替换为第一个字符。我使用组捕获来做到这一点。
问题是,我在作业的第二部分遇到麻烦,我需要删除索引0、2、4,…处的字符。
我已经完成以下工作:
String s = "1a2b3c4d5";
System.out.println(s.replaceAll(".(.)", "$1"));
此打印abcd5
,但正确答案必须是abcd
。仅当输入字符串的长度为奇数时,我的正则表达式才不正确。如果是偶数,则我的正则表达式可以正常工作。
我认为我真的很接近答案,但是我不确定如何解决它。
您确实非常接近答案:只需将匹配第二个字符作为可选字符即可。
String s = "1a2b3c4d5";
System.out.println(s.replaceAll(".(.)?", "$1"));
// prints "abcd"
之所以有效,是因为:
"null"
Matcher.group(int)
,后者会null
为失败的组返回让我们仔细看看作业的第一部分:
String s = "1a2b3c4d5";
System.out.println(s.replaceAll("(.).", "$1"));
// prints "12345"
在这里,您不必使用?
第二个字符,但是它“有效”,因为即使您不匹配最后一个字符, 也不必使用!
由于问题说明,最后一个字符可以保持不匹配,无法替换的状态。
现在假设我们要删除索引为1,3,5 …的字符,并将索引为0,2,4 …的字符放在方括号中。
String s = "1a2b3c4d5";
System.out.println(s.replaceAll("(.).", "($1)"));
// prints "(1)(2)(3)(4)5"
哈!现在,您在使用奇数长度输入时遇到了完全相同的问题!您无法将最后一个字符与您的正则表达式匹配,因为您的正则表达式需要两个字符,但最后一个字符用于奇数长度输入!
同样,解决方案是使匹配第二个char为可选:
String s = "1a2b3c4d5";
System.out.println(s.replaceAll("(.).?", "($1)"));
// prints "(1)(2)(3)(4)(5)"
问题内容: 我有两个弦 和。现在,我想对这些字符串应用一个正则表达式,以过滤掉除数字以外的所有内容,以便获得像和这样的整数。 我该怎么做? 问题答案: 您可以使用。它会考虑您所拥有的一切之外的一切。 因此,如果要过滤除y以外的所有内容。在你的情况下,你会做类似的事情 其中string是保存实际文本的变量!
问题内容: 我需要删除字符串中的一些子字符串(在大型数据集中)。该 子常常包含特殊字符,像这样的:,^,/,…和 的replaceAll()将它们视为对正则表达式的特殊字符,如点 会匹配任何字符,这是不是我真正想要的东西。 是否有其他函数可以执行“替换”而不将第一个 参数视为正则表达式? 问题答案: 只需使用String.replace()。它的功能相同,但是它 内部处理了特殊字符的转义,以避免您
我正在尝试用Java编写一个正则表达式,它从段落中删除所有非字母数字字符,但单词之间的空格除外。 如何修复此错误?
问题内容: 如何在Java中从给定的字符串中删除所有方括号(“ []”)? 在这种情况下将使用什么正则表达式? 问题答案: 使用这个:
问题内容: 假设我想使用正则表达式删除字符串中的所有重复字符(特定字符)。这很简单- 如果我想用相应的字符替换所有重复的字符(即a,z)怎么办?我该怎么做呢? 注意: 我知道可以使用哈希表或某些O(n ^ 2)算法更好地解决这种删除重复项的方法,但是我想使用正则表达式进行探索 问题答案: 的周围的指定 捕获组 ,然后将(一个 反向引用 在图案和替换两者)指的是第一个捕获组的内容。 因此,正则表达式
问题内容: 我是正则表达式的新手,并且想知道如何才能只获取字符串中的第一个数字,例如。在这种情况下,我希望它返回,但是数字也可以更短或更长时间。 我在考虑类似的东西,但它会将每个数字分别分开(100,2001,10,…) 谢谢。 问题答案: 尝试以下操作以匹配字符串中的第一个数字(该数字不能位于字符串的开头):