C # Regex Replace Pattern (Replace String) Возврат $ 1 - PullRequest
2 голосов
/ 15 сентября 2010

В настоящее время я работаю с анализом некоторых данных из SQL Server, и мне нужна помощь с Regex.

У меня есть сборка в Sql Server 2005, которая помогает мне заменить строки с помощью C # Regex.Replace () Метод.

Мне нужно разобрать следующее.

    Strings:

    CAD 90890

    (CAD 90892)

    CAD G67859

    CAD 34G56

    CAD 3S56.

    AX CAD 890990

    CAD 783783 MX

    Needed Results:

    90890

    90892

    G67859

    34G56

    3S56

    890990

    783783 

SELECT TOP 25 CADCODE, dbo.RegExReplace(CADCODE, '*pattern*', '$1')
FROM dbo.CADCODES
WHERE CADCODE LIKE '%CAD%'

Мне нужно получить исходящую строку после слова САПР, пока она не достигнет пробела или чего-либо, кроме цифры или цифры. Мне удалось получить цифры, но это действительно не сработало на других. Я пытаюсь заставить его работать, но я не могу найти реальное решение.

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

Обновлено, чтобы отразить новые строки

AX CAD 890990

CAD 783783 MX

Ответы [ 4 ]

1 голос
/ 16 сентября 2010

Я думаю, это то, что вам нужно:

^\W*\w*CAD\w*\W*(\w+)\W*$

Регулярное выражение должно соответствовать всей строке, чтобы RegExReplace мог заменить его на $1, эффективно удаляя ненужные части.

РЕДАКТИРОВАТЬ: Позвольте мне вернуться и убедиться, что я правильно понял.Из-за

WHERE CADCODE LIKE '%CAD%'

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

^.*?(\w+)\W*$
1 голос
/ 15 сентября 2010

Попробуйте это:

(\w+)\W*$

Шаблон соответствует последнему слову - сделан из буквенно-цифровых символов (и подчеркивания).
Пример: http://www.rubular.com/r/1zWQQVLZy1

Другой вариант - найти слово, содержащее хотя бы одну цифру - оно может совпадать в любом месте строки, поэтому вам может потребоваться обработать несколько совпадений. В этом случае вы можете добавить группу захвата вокруг всего шаблона или заменить, используя $&.

[a-zA-Z_]*\d\w*

Пример: http://www.rubular.com/r/XUrFNuPQUv

Если вы не можете сопоставить (Regex.Match) и должны использовать Regex.Replace, вы можете сопоставить всю строку от начала до конца и заменить ее нужной вам группой:

RegExReplace(CADCODE, '^.*\b([a-zA-Z_]*\d\w*)\b.*$', '$1')
0 голосов
/ 16 сентября 2010

Проблема с регулярным выражением состоит в том, что всегда легко получить хороший шаблон, если у вас ограниченный набор выборок.

В вашем случае вы используете: \ Ш {4} \ ш *

, который просто говорит, 4 буквенно-цифровых символа, за которыми следуют 0 или более буквенно-цифровых символов, поэтому все разделы САПР не будут совпадать, равно как и пробелы или ().

0 голосов
/ 15 сентября 2010

Попробуйте:

(?:\(CAD\)|CAD)\s+?([\dA-Z]+)

Результат можно получить по номеру группы захвата 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...