2010-09-15 3 views
2

В настоящее время я работаю с разбором некоторых данных с 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%' 

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

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

Обновлена ​​для отражения новых строк

AX CAD 890990

CAD 783783 MX

ответ

1

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

(\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

Что произойдет, если некоторые из строк не начинаются с САПР, а за ними следуют буквенно-цифровые символы? –

+0

@Callum Rogers - я все равно их фиксирую, вопрос не определяет, важен ли этот бит или нет. Я могу спросить вас то же самое - что, если OP хочет захватить в любом случае? – Kobi

+0

[a-zA-Z_] * \ d \ w * Совсем отлично, что мне нужно понять, так это то, как получить выход $ 1 для замены, так как мне нужно полностью исключить САПР. –

0

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

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

Вы ча n получить результат из группы захвата 1.

0

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

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

, который просто говорит, 4 буквы, цифры, а затем 0 или более букв и цифр, поэтому все разделы CAD не будет соответствовать, и не будет места или().

+0

Проблема с Regex заключается в том, что это боль в прикладе. В любом случае САПР может иметь несколько цифр и даже слово, но мне действительно нужно СЛОВО после САПР, пока оно не закончится чем-либо, что не является числом или буквой из алфавита [A-Za-z]. Просто извлеките его и получите в качестве результата в $ 1. –

+0

, поэтому, если я правильно понимаю вас, у вас будет САПР, а затем несколько предметов, затем 1 или более пробелов, после чего вы захотите слова после этого? Как насчет: CAD \ w * \ s + (\ w +) – LoveMeSomeCode

+0

См. Подход @Alan Moore, который работает, мой был похож на то, что я совпадал с словами, но я не мог получить группу вывода. Но поскольку он предлагает вам сначала сначала сопоставить всю строку. –

1

Я думаю, что это то, что вы после:

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

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

EDIT: Позвольте мне выполнить резервное копирование и убедиться, что у меня все в порядке. Из-за

WHERE CADCODE LIKE '%CAD%' 

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

^.*?(\w+)\W*$ 
+0

Отличный подход и он работает. У меня просто небольшая проблема, которая не была в сфере. Я узнал, что у меня будут строки с «AX CAD 098909» вместо CAD в качестве начала, а также строки после «CAD 098909 MX». –

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