前缀为的字符串的Java正则表达式@

前缀为的字符串的Java正则表达式@,java,regex,Java,Regex,假设我有以下字符串 "@apple @banna @? example@test.com" 现在我想去 "apple banna ? example@test.com" 我的正则表达式应该是什么来删除“@”符号而不影响电子邮件地址 一种方法是: String fruit = fruit.replaceAll("@", " "); str.replaceAll("@apple", "apple"); str.replaceAll("@banna", "banna"); str.repla

假设我有以下字符串

"@apple @banna @? example@test.com"
现在我想去

"apple banna ? example@test.com"

我的正则表达式应该是什么来删除“@”符号而不影响电子邮件地址

一种方法是:

String fruit = fruit.replaceAll("@", " ");
str.replaceAll("@apple", "apple"); 
str.replaceAll("@banna", "banna"); 
str.replaceAll("@?", "?");

这个问题自最初发布以来发生了重大变化。我最初的回答虽然对最初提出的问题是正确的,但已不再正确

此代码将执行以下操作:

String noStrayAts = input.replaceAll("(?<=\\s)@", ""); 

我想这会管用的

str = str.replaceAll("(?<!\S)@(?=\S+)");

str=str.replaceAll(“(?这将删除字符串中的所有@符号,而不仅仅是第一个符号对有效电子邮件地址无效。对不起,您在哪里说过有效电子邮件地址?请在问题中更好地解释,人们将能够帮助您更好。您的确切意思是什么?此代码迷惑了您问题中的示例要求。请提供示例输入和输出,所以我理解你的意思。应该注意,这个答案是不正确的,因为它对电子邮件地址无效,如OP所述。我厌倦了str.replaceAll(“@apple”,“apple”);和str.replaceFirst(“@”,“apple”)你需要更清楚地知道你希望删除的
@
后面的字符是什么,因为你不想删除电子邮件地址中的
@
。我假设你的字符串中不会有“apple”和“banna”。是否像上面一样,@总是出现在单词的开头?不要伪造t您必须执行
str=str.replaceFirst(“@”和“”);
由于字符串是不可变的,replaceFirst方法返回一个新字符串,而不是修改现有字符串。在您的问题更新后更新了我的答案我认为下面的答案符合您的要求。它会检查以确保@是单词的第一个字符,并且它本身不是一个字符。这只会按照问题中的示例进行操作。这不适用于电子邮件地址,第三行将
@
转换为
。您可能想使用
replace()而不是
replaceAll()
,它将搜索词视为文字字符串,而不是正则表达式。这是一个非常有趣的网站。我不经常使用正则表达式,但我很快就会使用它。@SaviourSelf,如果你喜欢它,你也会喜欢它。它实际上会为你分解正则表达式,并告诉你发生了什么。
str = str.replaceAll("(?<!\S)@(?=\S+)");
(?<!\S)     // Checks to make sure that the @ is preceded by a whitespace
            // character, or is the beginning of the string. This exists to make sure we're not in an email.
@           // Literal @
(?=\S+)     // Makes sure that something besides whitespace follows.