Помогите с выражением регулярного выражения - PullRequest
0 голосов
/ 20 июля 2010

Я пытаюсь получить слово после Sysdba. из строки. Вот пример, где мой результат будет PRODUCTION

CAST(CASE WHEN SYSDBA.PRODUCTION.SHIPPING_COMPLETE_DATE IS NOT NULL THEN 1 ELSE 0 END AS bit) AS [Shiping Completed]]

Я создал регулярное выражение

Regex CatagoryRegex = new Regex(@"SYSDBA\.(.#)\.", RegexOptions.IgnoreCase | RegexOptions.Compiled);

однако, когда я звоню var tmp = CatagoryRegex.Match(SelectText);, я не получаю совпадений. Я знаю, что, скорее всего, совершаю простую ошибку, но не могу ее обнаружить.

Ответы [ 2 ]

2 голосов
/ 20 июля 2010

Ваша конкретная проблема заключается в том, что .# будет соответствовать «любому символу», за которым следует # символ.

Самым простым решением может быть использование .+, но это немного грубо для того, что выкажется, делают.На шаг лучше - не жадный .+?, который будет захватывать только до следующего . (если он не должен идти дальше), но я бы, вероятно, пошел бы на шаг дальше, чем этот ...

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

"SYSDBA\.([^.]+)\."

, где [^.] - любой символ, не являющийся . (нет необходимости экранировать в классах символов), а +означает «один или несколько».

Если вы хотите разрешить . в вашей захваченной группе, вы можете использовать:

"SYSDBA\.(\S+)\."

Где \S - это любое непробельное пространствосимвол (поэтому прекращает сопоставление, если пробелы или символы новой строки).

0 голосов
/ 20 июля 2010

Вы, вероятно, имеете в виду .* вместо .#.

...