Dnyaneshwar Sable Ответов: 4

Как найти строку после и перед символом в C#


Если у меня есть строка " MP-MS-BL-FO-L2000-W294"
я хотел бы заменить цифру, которая появляется после -L и до-W294 ..
Например.
-L2000 будет -L2500
-L2350 будет -L2360

Значение берется из базы данных, поэтому строка будет динамической.
Я не хочу использовать метод замены, потому что мои цифры меняются динамически.

заранее спасибо,

Что я уже пробовал:

если (Pcode_Code.Содержит("-L"))
{

}

Karthik_Mahalingam

каким будет значение из базы данных?

Dnyaneshwar Sable

Значение будет таким : MP-MS-BL-FO-L2000-W294

4 Ответов

Рейтинг:
5

NathanRO

Простой:

string UpdateValueL(string orgStr, int newVal)
{
    return Regex.Replace(orgStr, @"(?<=-L)([0-9]*)(?=-W)", newVal.ToString());
}


Или если у вас никогда не было двух "кодовых блоков" с одним и тем же префиксом (например, L, W, RD и т. д.), Сделайте его возможным использовать на любом "кодовом блоке".

string UpdateValue(string orgStr, string codeBlockPrefix, int newVal)
{
    // Note: codeBlockPrefix contains the code itself excluding the dash (-) seperator.
    // Examples: "L", "W", "RD"    
    return Regex.Replace(orgStr, @"(?<=-" + codeBlockPrefix + @")([0-9]*)", newVal.ToString());
}


Рейтинг:
28

OriginalGriff

Это не так сложно, за исключением того, что мы не можем точно сказать вам, что делать, потому что мы понятия не имеем, каковы ваши правила для нового значения на самом деле, и ваши примеры показывают два различных возможных правила.
Но суть проста:
Найдите данные для замены, сгенерируйте новое значение, замените.
Вы могли бы использовать для этого подстроку, но регулярное выражение сделает это, вероятно, проще:

private Regex getContent = new Regex(@"(?<=-L).+?(?=-W)");
private void MyButton_Click(object sender, EventArgs e)
    {
    string input = "MP-MS-BL-FO-L2000-W294";
    Match m = getContent.Match(input);
    string data = m.Value;
    // Modify your data
    data = "XX" + data + "YY";
    //
    string output = getContent.Replace(input, data);
    }


Рейтинг:
16

Karthik_Mahalingam

string input = "MP-MS-BL-FO-L2000-W294";
       int start = input.IndexOf("-L")+2;
       int end = input.IndexOf("-W");
       var existingValue  = input.Substring(start, end - start); //2000"
       string valueToReplace = "2500";
       input = input.Replace(existingValue, valueToReplace); //"MP-MS-BL-FO-L2500-W294"


Рейтинг:
1

Patrice T

Взгляните на RegEx (регулярные выражения).

в 3 этапа
- извлеките 9999 из "-L9999-"
- используйте таблицу loopup для нового значения
- замените старое значение новым

perlre - perldoc.perl.org[^]
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]


Dnyaneshwar Sable

можете ли вы показать мне, как это сделать ?

Patrice T

См. Решение 2