Замена чисел в строках на C # - PullRequest
2 голосов
/ 03 апреля 2009

Я думал, что заменю регулярное выражение

Regex r = new Regex("[0-9]"); 
return r.Replace(sz, "#");

в файле с именем aa514a3a.4s5. Это работает именно так, как я ожидаю. Он заменяет все числа, включая числа в доп. Как мне сделать так, чтобы НЕ заменить цифры в доп. Я пробовал множество регулярных выражений, но я начинаю думать, что это шаблон "все или ничего", поэтому я не могу это сделать? мне нужно отделить ext от строки или я могу использовать регулярное выражение?

Ответы [ 4 ]

3 голосов
/ 03 апреля 2009

Этот делает это для меня:

(?<!\.[0-9a-z]*)[0-9]

Это приводит к отрицательному взгляду (строка не должна встречаться перед совпавшей строкой) в периоде, за которым следует ноль или более буквенно-цифровых символов. Это гарантирует, что сопоставляются только те номера, которые отсутствуют в вашем добавочном номере.

Очевидно, что [0-9a-z] необходимо заменить тем, какие символы вы ожидаете в своем расширении.

2 голосов
/ 03 апреля 2009

Я не думаю, что вы можете сделать это с помощью одного регулярного выражения.

Вероятно, лучше всего разбить исходную строку на основание и расширение; сделать замену на базе; затем присоединитесь к ним.

1 голос
/ 03 апреля 2009

Почему бы не запустить регулярное выражение для подстроки?

String filename = "aa514a3a.4s5";
String nameonly = filename.Substring(0,filename.Length-4);
1 голос
/ 03 апреля 2009

Да, я думаю, вам лучше отделить расширение.

Если вы уверены, что всегда есть 3-символьное расширение в конце вашей строки, самое простое, удобочитаемое / поддерживаемое решение - выполнить замену только на

yourString.Substring(0,YourString.Length-4)

.. а затем добавить

yourString.Substring(YourString.Length-4, 4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...