2015-06-12 3 views
0

Я пытаюсь получить регулярное выражение для проверки/извлечения из строки всех символов до первого доллара. Если строка не имеет доллара, она должна соответствовать всей строке, но она не работает.C# Regex Сопоставьте текст до определенного символа

Что я испытываемый:

System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "/[^\$]*/"); 

Что я ожидаю, чтобы получить в match.value => 12345678 Если строка передается, например, 123456781 он должен вернуть все.

Что не так?

Thanks С уважением.

ответ

0

Из того, что я получаю, выражение, которое вы используете, будет соответствовать любой строке, которая состоит из 0 или более экземпляров любого символа, отличного от $.

Вы могли бы попробовать что-то, как показано ниже:

 string sample = "1234578"; 
     Regex regex = new Regex("(.+?)(\\$|$)"); 
     if (regex.IsMatch(sample)) 
     { 
      Match match = regex.Match(sample); 
      Console.WriteLine(match.Groups[1]); 
     } 

Какие матчи и извлекает любые номера до $ (обозначенное как \\$) или же, в конце строки (обозначается $), который когда-либо приходит первым ,

-2
System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "(.+)\\$"); 

И ваш результат будет в match.Groups [1]

+0

'все символы' => не только десятичные числа –

1

Вы забываете, чтобы избежать ваши \:

Match match = Regex.Match("12345678$1", "[^\\$]*"); 
Console.WriteLine(match.Value); 
match = Regex.Match("123456781", "[^\\$]*"); 
Console.WriteLine(match.Value); 

Выходы:

12345678 
123456781 

As указывается dolgsthrasir вам не нужно скрывать $ в вашем регулярном выражении, так что "[^$]*" в порядке.

+0

Я не думаю, что он хочет убежать от \. Из моего понимания вопроса он только хочет проверить символ '$'. Может быть, он ошибочно думал, что ему придется скрыться от этого персонажа. – Dolgsthrasir

+0

@ Dolgsthrasir вы, сэр, похоже, чертовски правы! –

1

Попробуйте с этим

System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "([^\\$]+)"); 

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

+1

Отредактировано и протестировано ... – iz25

+1

Спасибо, Джон, работал как шарм. Это то, что нужно. – Miguel

0

Вам не нужно регулярное выражение, вы можете просто использовать IndexOf и SubString

var str = "12345678$1"; 
int index = str.IndexOf("$"); 
if(index < 0) 
    return str; 
else 
    return str.Substring(0, index); 

Example

Смежные вопросы