Замените первые открывающие скобки и номер новым номером - PullRequest
0 голосов
/ 21 ноября 2018

Я использую Visual Studio / C # и имею следующую строку:

string test = "We have files (15 files)";

Теперь я хочу заменить первое число (целое число) после первых открывающих скобок.

Напримересли мы заменим 15 на 6, строка теперь будет иметь это значение:

"We have files (6 files)"

Это то, что у меня есть, но оно не работает:

int newCount = 6;
test = Regex.Replace(test, "([0-9]", "(" + newCount );

Заранее спасибо

ПРИМЕЧАНИЕ # 1: Мне нужно проверить наличие открывающих скобок, если в первой области есть числа.Например, ниже:

"There are 20 missing (400 processed)"

Если передать 450, результат будет:

"There are 20 missing (450 processed)"

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

Попробуйте:

string test = "We have files (15 files)";
string pattern = "\d+";
string replacement = "6";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(test, replacement);

Вам не нужно заменять кронштейн.Приведенное выше регулярное выражение выбирает только число, которое может быть любым количеством цифр.

0 голосов
/ 21 ноября 2018
  int newCount = 6;
  string test = "We have files (15 files)";
  test = Regex.Replace(test, @"\([0-9]+", newCount.ToString());

Я пытался внести наименьшее количество изменений

вам не хватает оператора "+", который в основном говорит "один или несколько"

и после вашего Редактировать вам также не хватает "\", в котором отсутствует специальный символ

, вы всегда можете поиграть с регулярным выражением в сети и проверить свой шаблон здесь

Редактировать:

test = Regex.Replace(test, "[(0-9]", "(" + newCount); не будет работать, потому что вы замените первое столкновение каждого паттерна, и вы получите: We have files (6(6(6 files), потому что оно соответствует "(", "1", "5", и еслиисходный текст был We have files (156 files) [добавлено 6 в конце], вы получите We have files (6(6(6(6 files), потому что он не соответствует "(", "1", "5", "6"

0 голосов
/ 21 ноября 2018

Это из-за двух вещей.

Первое: ( - это символ, используемый RegEx, для буквального соответствия вам нужно экранировать его с помощью \: \(

Второе: вы соответствуете только одному номеру, поэтому, когда вы попытаетесь сопоставить (15, он совпадет и заменит (1

int newCount = 6;
test = Regex.Replace(test, @"\(\d+", "(" + newCount );

Это должно сработать!Ознакомьтесь с объяснением здесь

РЕДАКТИРОВАТЬ

Лучшим способом было бы сопоставить только число:

test = Regex.Replace(test, @"\d+", newCount.ToString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...