2009-10-06 2 views
2

Как проверить, является ли строка в текстовом поле простой строкой для RegEx?Как проверить, является ли строка строкой или регистром?

Я ищу текстовый файл по строкам.

либо .Contains(Textbox.Text); или Regex(Textbox.Text) Match(currentLine)

(я знаю, синтаксис не работает, как это, это только для презентации)

Теперь моя программа предполагает автоопределение если Textbox.Text в виде регулярных выражений или если это нормальная строка.

Любые предложения? Напишите мой собственный небольшой RexEx, чтобы определить, содержит ли Textbox RegEx?

Edit:

мне не удалось добавить Тад мои строки могут быть очень простыми, как Foo руда 0005 Я пытаюсь предложенные решения прямо сейчас!

+3

Как отличить два? Является ли «совпадение» с регулярным выражением или строкой? Это может быть и то, и другое? –

+0

Эта строка не проблема. '' match.me? "' это совсем другая история :-) – Joey

+1

Нет никакого способа. Обычно пользовательские интерфейсы предоставляют способ выбора, какой вариант использовать, например. с помощью флажка, который позволяет искать регулярные выражения. –

ответ

5

Вы не можете обнаружить регулярные выражения с регулярным выражением, так как сами по себе регулярные выражения не являются регулярными языка.

Однако, самое простое, что вы, вероятно, могли бы сделать, это попытаться скомпилировать регулярное выражение из вашего содержимого текстового поля, и когда он преуспеет, вы знаете, что это регулярное выражение. Если это не удается, вы знаете, что это не так.

Но это классифицирует обычные строки как «foo» как регулярное выражение. В зависимости от того, что вам нужно сделать, это может быть или не быть проблемой. Если это строка поиска, то результаты для этого случая одинаковы. В случае с «foo.bar» они будут отличаться, хотя, поскольку это допустимое регулярное выражение, но соответствует различным вещам, чем сама строка.

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

3

Многие строки могут быть регулярным выражением, каждое регулярное выражение действительно может быть строкой.

Рассмотрите строку «тонкая». может быть либо строкой («.» является точкой), либо регулярным выражением («.» - любой символ).

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

0

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

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

Другой подход может состоять в том, чтобы проверить, окружен ли он косой чертой (т.е.«/ Foo /») Ближайший регулярные выражения с косой чертой является обычной практикой (хотя вы должны удалить косую черту перед подачей его в регулярное выражении библиотеки)

2

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

Вы могли бы сделать что-то вроде этого:

string s = "I'm not a Regex"; 

if (s == Regex.Escape(s)) 
{ 
    // no regex indeed 
} 
+0

Как насчет «Я - регекс?» –

+0

В соответствии с документацией Regex.Escape() это будет считаться регулярным выражением. –

+0

Результат на самом деле такой же, как если бы строка всегда интерпретировалась как регулярное выражение. Единственное отличие: если нет специального выражения, оно выполняется быстрее. –

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