2011-12-14 3 views
0

Немного странный вопрос - я надеюсь избежать некоторых действительно уродливые программирования и думал, что кто-то может иметь отличный способ сделать это ...Regex - в том числе «+» при поиске десятичного

Я сейчас работаю над регулярным выражением, которое соответствует номерам в строке, например «222». Иногда эти числа включают десятичные знаки, «222,5» или иногда вместо «.5» заменяются знаком «плюс» - т.е. 222+.

Любые мысли о том, как я мог бы написать либо регулярное выражение, либо общую строку C#, которая могла бы интерпретировать символ «+» после любого числа в виде .5? Вот пример текущего кода, который у меня есть (ничего не делает с символами «+»).

string match = Regex.Match(subject, @"\s*-?\d+").Value; 

ответ

1
string match = Regex.Match(subject, @"-?(\d+((\.\d+)|\+)?)|(\.\d+)").Value 
    .Replace("+", ".5"); 
+0

легкие дни - это потрясающе. Спасибо eh – keynesiancross

+0

@keynesiancross оказалось, что была небольшая ошибка. –

+0

Какая ошибка? Я пошел прямо, бросил его в свой код ... ха-ха. Не имел бы двойной (\. \ D +), с 'или' (|) не имеет большой разницы ... Я, вероятно, что-то пропустил, хотя – keynesiancross

2

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

\s*-?\d+\+? 

Обратите внимание, что \+ соответствует символ плюс и ? делает его необязательным.

Теперь я бы обернул детали в «захватывает» и извлекал значения.

\s*(-?\d+)(\+)? 

В скобках вы можете извлечь составные части спички.

Итак, теперь вы бы:

var match = Regex.Match(subject, @"\s*(-?\d+)(\+)?"); 
var value = decimal.Parse(match.Groups[1].Value); 
value += match.Groups[2].Success ? 0.5M : 0.0M; 

Если вам нужно, чтобы быть в состоянии соответствовать значения типа «0.5» или просто».5' , вы можете изменить \d+ в конечном продукте что-то вроде это:

(?:\d*\.)?\d+ 
+0

У этого есть несколько ошибок. -.5 возвращает 5.0. У вас также есть несогласованные круглые скобки в строке 2. –

+0

@Yury: Он никогда не говорил, что элементы могут содержать десятичные точки. –

+0

* Иногда эти числа включают десятичные знаки, «222,5» * –

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