Причина, по которой он не работает, состоит в том, что, предполагая, что вы используете регулярное выражение, предоставленное Джоном Скитом в принятом вами ответе, вы не ищете эту формулировку в своей строке.Задано регулярное выражение:
\(|\)|&&|\|\||\d+
это выглядит так:
NODE EXPLANATION
\( '('
| OR
\) ')'
| OR
&& '&&'
| OR
\|\| '||'
| OR
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
(любезно предоставлено http://rick.measham.id.au/paste/explain.pl) с небольшими изменениями.
Как вы можете видетьнет никакого способа, которым это будет соответствовать "&" или "1 & 2", поэтому, если вы хотите, чтобы вы это сделали, вам нужно включить эти значения в регулярное выражение.
Это регулярное выражение опирается на исходное выражение:
Я получил строку, содержащую:
"(" ")" "&&" "||"
и цифры (от 0 до 99999).
Один &
в вашей строке, которая не работает, не соответствует вышеприведенному. Действительно ли так, что у вас может быть четыре вышеуказанных строковых токена, а затем любой другой текст или все еще существуют ограничения, например числаи необязательный сингл &
? Если это так, то это на самом деле проблема, отличная от оригинальной ...
Если вы хотите использовать эти четыре вещи в качестве разделителей для произвольного текста, тогда Regex.Split может стать выходом(http://msdn.microsoft.com/en-us/library/8yttk7sy.aspx).
string[] results = Regex.Split(@"(54&1&1)||15", @"(\()|(\))|(&&)|(\|\|)");
Выше следует разделить первую строку на четыре указанных delimiters ("(" ")" "&&" "||") и выводят все разделенные строки и сами разделители.Одна из проблем, с которой вы можете столкнуться, заключается в том, что, если два разделителя находятся рядом, вы получите пустое значение в массиве, которое вам необходимо будет принять во внимание.
Результаты выше:
0 -
1 - (
2 - 54&1&1
3 - )
4 -
5 - ||
6 - 15
Также это не будет работать на .NET 1.0 или 1.1, но я надеюсь, что это не будет проблемой.
Следует отметить, что регулярное выражение было немного изменено, чтобы охватить все захватыв скобках, чтобы они захватывали группы и удаляли группу \ d +, которая просто использовалась для всего, что не было разделителями.
Чтобы удалить пустые записи из массива, все, что вам нужно, это строка кода, подобная:
results = results.Where(x=>!String.IsNullOrEmpty(x)).ToArray();
Конечно, вы можете оставить его как IEnumberable или аналогичный, если вам на самом деле не нужно это как массив.