我需要删除以@。
开头的字符串部分我的示例代码适用于一个字符串,而另一个字符串则失败。
失败之一:无法删除@ news4buffalo:
String regex = "\\@\\w+ || @\\w*";
String rawContent = "RT @news4buffalo: Police say a shooter fired into a crowd yesterday on the Oakmont overpass, striking and killing a 14-year-old. More: http…";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(rawContent);
if (matcher.find()) {
rawContent = rawContent.replaceAll(regex, "");
}
成功一:
String regex = "\\@\\w+ || @\\w*";
String rawContent = "@ZaslowShow couldn't agree more. Good crowd last night. #LetsGoFish";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(rawContent);
if (matcher.find()) {
rawContent = rawContent.replaceAll(regex, "");
}
输出:
couldn't agree more. Good crowd last night. #LetsGoFish
答案 0 :(得分:1)
从你的问题来看,这个正则表达式可以为你效用:
rawContent = rawContent.replaceAll("@\\S*", "");
答案 1 :(得分:1)
您也可以尝试这种方式。
String s = "@ZaslowShow couldn't agree more. Good crowd last night. #LetsGoFish";
System.out.println(s.replaceAll("@[^\\s]*\\s+", ""));
// Look till space is not found----^^^^ ^^^^---------remove extra spaces as well
答案 2 :(得分:0)
正则表达式只考虑单词字符,而输入String
包含冒号:
。您可以通过在正则表达式中将\\w
替换为\\S
(任何非空格字符)来解决此问题。此外,不需要两种模式。
String regex = "@\\S*";
答案 3 :(得分:0)
您不需要逃离@
,因此请不要在\
之前添加"\\@"
(它会让人感到困惑)。
不要使用匹配器来检查字符串是否包含应该替换的部分,而不是使用replaceAll
,因为您必须第二次迭代。只需在开始时使用replaceAll
,如果它没有任何要替换的内容,它将保持字符串不变。 BTW。使用Matcher实例中的replaceAll
来避免重新编译Pattern。
表单foo||bar
中的正则表达式似乎不对。正则表达式只使用一个管道|
来表示OR,因此这样的正则表达式代表foo
OR emptyString
或bar
。由于空String是一种特殊的(每个字符串在开始,结尾,甚至在字符之间包含空字符串),它可能会导致一些问题,如"foo".replaceAll("|foo", "x")
返回xfxoxox
,而不是例如{{ 1}}因为在"xxx"
之前消耗空字符串会阻止它被用作f
的潜在第一个字符:/
无论如何,您似乎想接受任何foo
字词,因此如果您想确保在@xxxx
之后至少有一个字符,请考虑"@\\w+"
。
您还可以添加@
必须是单词的第一个字符的条件(如果您不想从电子邮件地址中删除@
之后的部分)。要做到这一点,只需使用像@
这样的后视,它会在(?<=\\s|^)@
存在一些空格之前检查它,或者它放在字符串的开头。
您还可以删除要删除的单词之后的空格(有任何内容)。
所以你可以试试
@
用于
等数据String regex = "(?<=\\s|^)@\\w*\\s?";
将返回
RT @news4buffalo: Police say a shooter fired into a crowd yesterday on the Oakmont overpass, striking and killing a 14-year-old. More: http…
但是,如果您还希望删除RT : Police say a shooter fired into a crowd yesterday on the Oakmont overpass, striking and killing a 14-year-old. More: http…
中\\w
之类的字母或数字字符旁边的其他字符,则只需使用代表非空白字符的:
,那么您的正则表达式可以看起来像
\\S