Извлечь текст между несколькими скобками - PullRequest
0 голосов
/ 28 января 2020

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

Образец: аспирин (150 мг) + аторвастатин (10 мг) + клопидогрел (75 мг) Капсула

Желаемый выход: 150 мг + 10 мг + 75 мг

Спасибо

Ответы [ 3 ]

2 голосов
/ 28 января 2020

Другой вариант использования функции TEXTJOIN и вместе с INDEX + FILTER XML для принудительного преобразования формулы массива в более короткую и нормальную формулу,

и функция FILTER XML возвращают массив без ошибок / пустые ячейки, поэтому IFERROR () не требуется

Затем в B2 формула копируется вниз:

=TEXTJOIN("+",1,INDEX(FILTERXML("<a><b>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,")",""),"(","<r/>")," ","</b><b>")&"</b></a>","//b[r]"),0))

enter image description here

2 голосов
/ 28 января 2020

Вы можете попробовать следующую формулу, но она основана на вашем примере. Необходимо настроить параметр Num_Chars, если длина данных в parentheses отличается.

=MID(A1,SEARCH("(",A1)+1,5) & "+" & MID(A1,SEARCH("(",A1,SEARCH("(",A1)+1)+1,4) &"+"&MID(A1,SEARCH("(",A1,SEARCH("(",A1,SEARCH("(",A1)+1)+1)+1,4)

enter image description here

Вы можете использовать приведенную ниже формулу, если длина данных всегда 4 or 5 character в скобках.

=SUBSTITUTE(MID(A1,SEARCH("(",A1)+1,5) & "+" & MID(A1,SEARCH("(",A1,SEARCH("(",A1)+1)+1,5) &"+"&MID(A1,SEARCH("(",A1,SEARCH("(",A1,SEARCH("(",A1)+1)+1)+1,5),")","")

0 голосов
/ 28 января 2020

Вот альтернатива, если у вас есть доступ к формуле TEXTJOIN. Вам необходимо ввести его с помощью Ctrl+Shift+Enter (преобразовать в массив):

=TEXTJOIN("mg + ",TRUE,IFERROR(TRIM(MID(SUBSTITUTE(SUBSTITUTE(A1,"(",REPT(" ",255)),"mg)",REPT(" ",255)),1+255*ROW($A$1:INDEX($A:$A,LEN(A1))),255))*1,""))&"mg"

Результат:

enter image description here

...