Как использовать объект регулярного выражения C # для выполнения этой замены? - PullRequest
2 голосов
/ 02 марта 2010

Я пишу метод, чтобы взять строку DevExpress «filter» и преобразовать ее в пригодную для использования строку SQL. По большей части это легко с простыми заменами строк здесь или там. Одна вещь, однако, заставляет меня чесать голову, потому что я просто не нашел времени на изучение регулярных выражений в C # /. NET.

Когда используется десятичное число, DevExpress выдает строку типа «FieldName> 2.0m». Проблема заключается в десятичном значении «m» в конце числа. Мне нужно взять все подстроки формата ###. ### m и изменить их на ###. ### (где число цифр является переменным). Если я правильно помню, совпадение с этим числом будет примерно таким:

[0-9,.]* 

Но как мне найти число с «m» в конце и как использовать класс Regex для генерации новой строки с удаленным m?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 02 марта 2010
Regex.Replace(source, @"(\d+\.\d+)m", "$1");
3 голосов
/ 02 марта 2010

Это будет соответствовать строкам, следующим за этим шаблоном - одно или несколько чисел, затем ., затем одно или несколько чисел, после которых m:

\d+\.\d+m

См. этот удобный шпаргалка.

Чтобы иметь возможность обратиться к исходному номеру (без m), вам нужно захватить совпадение ( захваченная группа ) для обратной ссылки, используя ():

(\d+\.\d+)m

Теперь это позволит вам заменить:

RegEx.Replace(source, @"(\d+\.\d+)m" ,"$1");

$1 относится к первой захваченной группе.

2 голосов
/ 02 марта 2010
Regex re = new Regex(@"(\d+\.\d+)m");
foreach (Match m in re.Match(str))
   m.Groups[1]; //will contain ###.###
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...