我正在做twitter数据的规范化工作。推特用户经常使用诸如ts I looooooove这样的术语来强调爱这个词。我想把这些重复的字符替换成一个合适的英文单词,直到我得到一个合适的有意义的单词(我意识到我不能通过这种机制来区分上帝和善)。
我的策略是
String[]字符串={“”,"good","OK","boolean","mee","claaap“};string regex = "(a-z)\1{2,}";pattern Pattern = Pattern.compile(regex);for (String : String ){ matcher Matcher = pattern.matcher(string);if (matcher.find()) { System.out.println(string+”TRUE ");}}
由于我的Java知识很差,我无法处理3和4。问题是我不能替换所有的字符,只能替换两个重复的连续字符。以下代码片段将替换除一个重复字符以外的所有字符System.out.println(data.replaceAll("([a-zA-Z])\\1{2,}", "$1"));
需要帮助才能找出A。如何替换除2个连续重复字符之外的所有字符B。如何从A的输出中删除多一个连续字符我认为B可以通过以下代码片段进行管理
System.out.println(data.replaceAll("([a-zA-Z])\\1{1,}", "$1"));
编辑:由Wiktor Stribiżew提供的解决方案在Java中完美工作。我想知道在python中需要做哪些更改才能得到相同的结果。Python使用re.sub。
发布于 2017-04-25 17:06:36
您的正则表达式([a-z])\\1{2,}
将一个ASCII字母匹配并捕获到组1中,然后匹配出现该值的2个或更多个。因此,您需要替换为保存捕获的值的反向引用$1
。如果您使用一个$1
,则aaaaa
将替换为单个a
;如果您使用$1$1
,则将其替换为aa
。
String twoConsecutivesOnly = data.replaceAll(regex, "$1$1");
String noTwoConsecutives = data.replaceAll(regex, "$1");
请参阅Java demo。
如果需要使正则表达式不区分大小写,可以使用"(?i)([a-z])\\1{2,}"
甚至"(\\p{Alpha})\\1{2,}"
。如果必须处理任何Unicode字母,请使用"(\\p{L})\\1{2,}"
。
BONUS:在一般情况下,要替换任意数量的重复连续字符,请使用
text = text.replaceAll("(?s)(.)\\1+", "$1"); // any chars
text = text.replaceAll("(.)\\1+", "$1"); // any chars but line breaks
text = text.replaceAll("(\\p{L})\\1+", "$1"); // any letters
text = text.replaceAll("(\\w)\\1+", "$1"); // any ASCII alnum + _ chars
发布于 2018-07-27 04:19:08
/*This code checks a character in a given string repeated consecutively 3 times
if you want to check for 4 consecutive times change count==2--->count==3 OR
if you want to check for 2 consecutive times change count==2--->count==1*/
public class Test1 {
static char ch;
public static void main(String[] args) {
String str="aabbbbccc";
char[] charArray = str.toCharArray();
int count=0;
for(int i=0;i<charArray.length;i++){
if(i!=0 ){
if(charArray[i]==ch)continue;//ddddee
if(charArray[i]==charArray[i-1]) {
count++;
if(count==2){
System.out.println(charArray[i]);
count=0;
ch=charArray[i];
}
}
else{
count=0;//aabb
}
}
}
}
}
https://stackoverflow.com/questions/43605292
复制相似问题