前缀为的字符串的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.