Еще один способ постановки проблемы:
||
(последовательные |
) не допускаются, а также те, которые содержат только два или более пробелов *.
- Если существует
| |
(один пробел между ними) в проверяемом тексте, ему должно предшествовать любое количество не |
текст, с |
или другой | |
непосредственно перед этим, и за ним должно немедленно следовать любое количество не |
текст с последующим |
или другой | |
,
- Если нет
| |
тогда либо не должно быть |
или ровно два |
,
Условие 1. технически явно исключено в вопросе ("любое количество текста" может означать, что нет или допускается только пробел), но из примеров можно сделать вывод, что это является целью ОП.
С измененными условиями, как указано выше, решение, основанное только на формулах, становится легко очевидным, как показано на следующем листе:
Это формула, введенная в B2:B11
:
=IF(CHOOSE(MIN(3,1+LEN(A1)-LEN(SUBSTITUTE(A1,"|",""))),TRUE,FALSE,AND(LEN(A1)-LEN(SUBSTITUTE(A1,"|",""))-(LEN(A1)-LEN(SUBSTITUTE(A1,"| |","")))/3*2=2,LEN(TRIM(MID(A1,FIND("|",A1)+1,FIND("|",A1,FIND("|",A1)+1)-FIND("|",A1)-1)))>0)),"ok","wrong")
Объяснение:
Предварительно подтвержденный вариант формулы выглядит следующим образом:
=
IF(
CHOOSE(
MIN(3,1+LEN(A1)-LEN(SUBSTITUTE(A1,"|",""))),
TRUE,
FALSE,
AND(
LEN(A1)-LEN(SUBSTITUTE(A1,"|",""))-(LEN(A1)-LEN(SUBSTITUTE(A1,"| |","")))/3*2=2,
LEN(TRIM(MID(A1,FIND("|",A1)+1,FIND("|",A1,FIND("|",A1)+1)-FIND("|",A1)-1)))>0
)
),
"ok",
"wrong"
)
Три вышеприведенных условия могут быть изменены следующим образом:
[a] Должно быть еще 2 |
чем те, которые приходятся на | |
с (первый и последний).
а также
[b] Если таковые существуют |
, должно быть как минимум два из них, и первые два из них должны быть разделены хотя бы одним непробельным символом.
Формула для [а]:
LEN(A1)-LEN(SUBSTITUTE(A1,"|",""))-(LEN(A1)-LEN(SUBSTITUTE(A1,"| |","")))/3*2=2
Формула для внутри- |
Текстовая часть проверки [b]:
LEN(TRIM(MID(A1,FIND("|",A1)+1,FIND("|",A1,FIND("|",A1)+1)-FIND("|",A1)-1)))>0
Другая часть [b] (то есть, что не может быть только один |
) обрабатывается функцией CHOOSE()
, которая также заботится о том случае, когда |
(требуется, поскольку этот крайний случай вызывает ошибки в формуле [b] и неверный результат для формулы [a]).
Первый аргумент функции CHOOSE()
,
MIN(3,1+LEN(A1)-LEN(SUBSTITUTE(A1,"|","")))
наносит на карту возможные количества |
s к индексам 1
, 2
и 3
например так: [0,1,2,3,4,…]
→ [1,2,3,3,3,…]
, и, таким образом, функция возвращает TRUE
для счетчика 0
, FALSE
для счетчика 1
и результат функции AND()
для всех остальных счетчиков.
* Условие не позволяет два или более внутри- |
пробелы можно ослабить с помощью функции TRIM()
.