Как удалить подстроку между двумя символами (+
и @
). Экс-Удалить подстроку между двумя символами
[email protected]
должен дать [email protected]
Какие Regex я должен использовать для этого.
Как удалить подстроку между двумя символами (+
и @
). Экс-Удалить подстроку между двумя символами
[email protected]
должен дать [email protected]
Какие Regex я должен использовать для этого.
String s = "[email protected]";
String email = s.replaceAll("\\+.*@", "@");
Использование регулярных выражений является:
String repl = str.replaceAll("(.*?)[+].*?(@.*)", "$1$2");
Хотя вы можете полностью избежать регулярных выражений и использовать String#indexOf
методы, чтобы найти 2 позиции и получить подстроки с использованием этого.
Попробуйте это «$ 1 @ $ 2» для замены. –
Fxed it. На самом деле я намеревался сохранить '@' в скобках, но не понял. – 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);
}
с использованием 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
есть только один случай, или вы хотите удалить все из них? – Will