Я хочу удалить -L
с конца моей строки, если существует
Так
ABCD => ABCD
ABCD-L => ABCD
на данный момент я использую что-то вроде строки ниже, которая использует тип размещения if/else
в моем Regex, однако у меня есть ощущение, что это будет намного проще, чем это.
var match = Regex.Match("...", @"(?(\S+-L$)\S+(?=-L)|\S+)");
Как насчет того, чтобы делать:
Regex rgx = new Regex("-L$");
string result = rgx.Replace("ABCD-L", "");
Итак, в основном: если строка заканчивается на -L
, замените эту часть пустой строкой.
Если вы хотите не только вызвать замену в конце строки, но и в конце слова, вы можете добавить дополнительный переключатель для обнаружения границ слов (\b
) в дополнение к концу строки:
Regex rgx = new Regex("-L(\b|$)");
string result = rgx.Replace("ABCD-L ABCD ABCD-L", "");
Обратите внимание, что обнаружение границ слов может быть немного неоднозначным. См. Здесь список символов, которые считаются символами слова в С#.
Replace
работает только когда rgx.Sucess
имеет значение true
?
rgx.Sucess
? Не могу найти эту собственность нигде. В любом случае, если ничего не найдено, ничто не заменяется.
Вы также можете использовать метод String.Replace(), чтобы найти определенную строку внутри строки и заменить ее другой строкой в этом случае пустой строкой.
http://msdn.microsoft.com/en-us/library/fk49wtc1(v=vs.110).aspx
Вы, конечно, можете использовать Regex для этого, но почему при использовании обычных строковых функций яснее?
Сравните это:
text = text.EndsWith("-L")
? text.Substring(0, text.Length - "-L".Length)
: text;
к этому:
text = Regex.Replace(text, @"(\S+?)-L(?=\s|$)", "$1");
Или еще лучше, определите метод расширения следующим образом:
public static string RemoveIfEndsWith(this string text, string suffix)
{
return text.EndsWith(suffix)
? text.Substring(0, text.Length - suffix.Length)
: text;
}
Тогда ваш код может выглядеть так:
text = text.RemoveIfEndsWith("-L");
Конечно, вы всегда можете определить метод расширения с помощью Regex. По крайней мере, ваш код вызова выглядит намного чище и гораздо читабельнее и удобнее.
new Regex("-L$").Replace(text, "");
Используйте функцию Regex.Replace
,
Regex.Replace(string, @"(\S+?)-L(?=\s|$)", "$1")
Объяснение:
( group and capture to \1:
\S+? non-whitespace (all but \n, \r, \t, \f,
and " ") (1 or more times)
) end of \1
-L '-L'
(?= look ahead to see if there is:
\s whitespace (\n, \r, \t, \f, and " ")
| OR
$ before an optional \n, and the end of
the string
) end of look-ahead
string.Replace and string.Contains
не будут работать для вас ..? String.Replace (строка, строка)