回答
String s = "[email protected]";
String email = s.replaceAll("\\+.*@", "@");
使用正则表达式是:
String repl = str.replaceAll("(.*?)[+].*?(@.*)", "$1$2");
虽然你可以完全避免的正则表达式,并使用String#indexOf
方法来找出2个位置,让使用该子。
试用这个“$ 1 @ $ 2”进行更换。 –
固定它。其实我打算把'@'放在括号内,但错误输入。 – anubhava
试试这个。
str = str.replaceAll("\\+[^@]*@", "@");
class Test {
public static void main(String[] args) {
String str = "bunny+12kddddd+++ddd/d/d/d/d\\####[email protected]";
str = str.replaceAll("\\+[^@]*@", "@");
System.out.println(str);
}
}
s = s.replace(s.substring(s.indexOf("+"), s.indexOf("@")), "");
没有必要使用正则表达式。你可以这样做只是使用一个循环:
for(;;) {
int start = str.indexOf('+');
if(start == -1) break;
int stop = str.indexOf('@');
if(stop == -1) break;
str = str.substring(0,start+1) + str.substring(stop);
}
这是更冗长,但可以更好地解释给别人以后维护代码什么是你的意思做。并非每个人都很喜欢解码正则表达式。
我同意你的观点,正则表达式可能需要比预期更多的处理时间。这是一个更优雅的解决方案。如果您愿意,可以将其更改为单行。 str = str.substring(0,str.indexOf('+')+ 1)+ str.substring(str.indexOf('@')+1,str.length); –
@ScriptShiva是的,非常优雅,虽然我试图拼出来,以证明目标更清楚。如果你想全部替换它们,无论如何你都需要在循环中进行某种退出检查。 – Will
我的意思是这并不比一个小的正则表达式更好。也许你反其道而行之。 –
这是一个使用RegExp分组的解决方案。
String str = "[email protected]";
final Pattern pattern = Pattern.compile("(.+?)\\+.*@(.+?)$");
final Matcher matcher = pattern.matcher(str);
matcher.find();
System.out.println(matcher.group(1) +matcher.group(2));
干杯
public static string RemoveSpecialCharacters(string input) {
Regex r = new Regex("(?:[^a-z0-9 ]|(?<=['\"])s)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);
return r.Replace(input, String.Empty);
}
using System.Text.RegularExpressions; –
这个问题是关于Java而不是C#。 –
只写一个实用工具类切片字符串:
public class MyStringUtils {
public static void main (String[] args) {
String str = "[email protected]";
int startIndex = str.indexOf('+');
int endIndex = str.indexOf('@');
System.out.println("Outer: " + sliceRangeOuter(str, startIndex, endIndex));
System.out.println("Inner: " + sliceRangeInner(str, startIndex, endIndex));
}
public static String sliceStart(String str, int startIndex) {
if (startIndex < 0)
startIndex = str.length() + startIndex;
return str.substring(startIndex);
}
public static String sliceEnd(String str, int endIndex) {
if (endIndex < 0)
endIndex = str.length() + endIndex;
return str.substring(0, endIndex);
}
public static String sliceRangeInner(String str, int startIndex, int endIndex) {
if (startIndex < 0)
startIndex = str.length() + startIndex;
if (endIndex < 0)
endIndex = str.length() + endIndex;
return str.substring(startIndex, endIndex);
}
public static String sliceRangeOuter(String str, int startIndex, int endIndex) {
if (startIndex < 0)
startIndex = str.length() + startIndex;
if (endIndex < 0)
endIndex = str.length() + endIndex;
return sliceEnd(str, startIndex) + sliceStart(str, endIndex);
}
}
输出:
Outer: [email protected]
Inner: +12kl
- 1. 删除字符串之间的两个符号之间的字符串
- 2. 删除两个字符串之间的随机字符串android
- 3. 删除两个字符串之间的匹配字符
- 4. 替换/删除两个字符之间的字符串
- 5. sed:删除两个字符串之间的字符
- 6. 删除两个字符串之间的通用字符
- 7. 正则表达式删除两个字符之间的子字符串
- 8. 在两个分隔符之间删除字符串
- 9. 删除文件名中出现的两个字符串之间的字符串
- 10. 删除两个字符串之间的字符串的一部分
- 11. 删除unix中两个单词之间的字符串
- 12. 删除两个逗号之间的字符串
- 13. 删除两个字符串之间的文本sed,awk
- 14. 删除两个字符串之间的点
- 15. 删除两个字符串之间的引号
- 16. 如何删除两个字符串之间的多余匹配?
- 17. 在一行中删除两个字符串之间的字符串
- 18. 结合两个字符串,删除重复的子字符串
- 19. 如何删除字符串中两个字符之间的字符?
- 20. 如何找到两个字符串之间的子字符串?
- 21. 两个字符串之间的所有常见子字符串
- 22. 查找两个字符串之间的所有子字符串
- 23. 提取Haskell中两个子字符串之间的字符串
- 24. C#:如何删除2个字符串之间的匹配子字符串?
- 25. 两个字符串之间
- 26. 删除两个字符之间的字符
- 27. 提取两个字符之间的子字符串中的C#
- 28. RegEx模式删除两个特定字符之间的字符串
- 29. sed删除不同行上两个字符串之间的字符
- 30. 删除两个字符之间的最后一个字VB.Net
是那里只是出现一次,或者你想删除所有这些? – Will