Я бы использовал регулярные выражения, так как вы не всегда можете использовать Linq для SQL.
Как этот пример Linq to Objects
List & lt; string & gt; list = new List & lt; string & gt; (); list.Add ("Это предложение."); list.Add («Это еще один»); list.Add («C # - забава»); list.Add («Linq также забава»); System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex ("This"); var qry = list .Where & lt; string & gt; (item = & gt; regEx.IsMatch (item)) .ToList & lt; string & gt; (); // Печать результатов foreach (элемент var в qry) {Console.WriteLine (item); }
Вы не должны помещать пробел после запятой, а {1}
является избыточным.
Вы можете скомпилировать регулярное выражение с флажком VERBOSE, это означает, что большинство пробелов в регулярном выражении будут игнорироваться. Я думаю, что это очень хорошая практика для описания сложных регулярных выражений более читаемым образом.
Подробнее см. [D0] здесь ...
Надеемся, что это поможет ...
[]
. Во-вторых, регулярное выражение OP не начинает вести себя так, как ожидалось, просто используя флаг VERBOSE; его регулярное выражение должно измениться - см. мой ответ.
– John Machin
12 February 2011 в 21:30
Попробуйте
p = re.compile ('a {1} b {1,3}')
... и учтите пространство.
Вы видите поведение re
, которое очень «темное», почти на ошибке (или два).
# Python 2.7.1 & gt; & GT; & GT; import & gt; & gt; & gt; & gt; & gt; & gt; pat = r "b {1, 3} \ Z" & gt; & gt; & gt; bool (re.match (pat, "bb")) False & gt; & gt; & gt; & gt; & gt; bool (re.match (pat, "b {1, 3}")) True & gt; & gt; & gt; & gt; & gt; bool (re.match (pat, "bb", re.VERBOSE)) False & gt; & gt; & gt; & gt; & gt; bool (re.match (pat, "b {1, 3}", re.VERBOSE)) False & gt; & gt; & gt; & gt; & gt; & gt; bool (re.match (pat, "b {1,3}", re.VERBOSE)) True & gt; & gt; & gt; & gt; & gt; & gt;
Другими словами, шаблон "b {1, 3}"
соответствует буквальному тексту "b {1, 3}"
в нормальном режиме и буквальный текст "b {1,3}"
в режиме VERBOSE.
«Закон наименьшего удивления» предполагает либо (1) пространство перед 3
был проигнорирован, и он соответствовал "b"
, "bb"
или "bbb"
в случае необходимости [предпочтительнее] или (2) исключение во время компиляции.
Взгляд на него по-другому: две возможности: (a) Человек, который пишет Еще одна перспектива: когда пространство достигнуто, оно уже разобралось Обновить Сообщение об ошибке подано. «{1, 3}»
пронизана духом PEP8 и полагает, что он предписывающий и применяется повсюду. (б) Человек, который пишет, что протестировал re
недокументированное поведение и фактически хочет сопоставить литеральный текст "b {1, 3} "
и извратно хочет использовать r" b {1, 3} "
вместо явного экранирования: r" b \ {1, 3} "[ ! d14]. Мне кажется, что (а) гораздо вероятнее, чем (б), и
re
должны действовать соответственно. {
, строка цифр и запятая, т.е. хорошо в {m, n}
"оператор" ... молча игнорировать неожиданный символ и рассматривать его как бы это был буквальный текст ошеломляющий, perlish и т. д.
Не вставляйте пробелы между {
и }
.
p = re.compile ('a {1} b {1 , 3} ')
Удалите лишние пробелы в b
.
Изменить:
p = re.compile ('a {1} b {1 , 3} ')
to:
p = re.compile (' a {1} b {1,3} ') ^ # no whitespace
, и все должно быть хорошо.
{1}
. Благодарю. – user225312 12 February 2011 в 16:26