Извлечь строку между повторяющимися символами?

Кажется, я не могу понять, как правильно использовать FIND SEARCH MID и LEFT при попытке сделать это в Excel.

Вот пример строки:

""["{".tag": "file", "path": {"namespace_relative": {"ns_id": "7967408752", "relative_path": "/Assets Creative/National/2021 Brand Winter/Web/Nana-FR-16x9_WEB15F.mp4", "is_shared_namespace": true}}, "display_name": "Tana-FR-16x9_WEB15F.mp4", "file_id": "id:rAWlCkcfulAAAAAAAAKx4g"}"]""

Котировки включены.

все в одной таблице. Я пытаюсь извлечь текст между:

"relative_path": " и ", "is_shared_namespace": true}},

так это было бы Assets Creative/National/2021 Brand Winter/Web/Nana-FR-16x9_WEB15F.mp4 (без / и в строке)

Тем временем я продолжу работать над этим, но вся помощь очень ценится.

РЕДАКТИРОВАТЬ

Думаю, я получил ответ:

=MID(M4,FIND("/Ass",M4)+1,FIND("is_shared",M4)-FIND("/Ass",M4)-7)

Я не уверен, правильный это ответ или лучший, но он выводит то, что мне нужно. Меня беспокоит то, что файл не заканчивается на mp4

Спасибо,

2 ответа
2

=MID(A1,FIND(String1,A1)+LEN(String1)+1,FIND(String2,A1)-(FIND(String1,A1)+LEN(String1)+1)-1)

или, если вы хотите жестко закодировать строки, вам нужно экранировать двойные кавычки с помощью двойной кавычки:

=MID(A1,FIND("""relative_path"": """,A1)+LEN("""relative_path"": """)+1,FIND(""", ""is_shared_namespace"": true}}",A1)-(FIND("""relative_path"": """,A1)+LEN("""relative_path"": """)+1)-1)

  • Рон – вам, вероятно, следует изменить свой ответ и добавить, что он должен определить строки, если первое решение, которое будет использоваться, я сделал это аналогичным образом, где у меня есть строки, которые он ищет в ячейках A1 и A2, и его список начинается с A3 вниз, и формула вставляется в B2, и ему просто нужно перетащить B2 вниз, пока он не достигнет конца списка в столбце A – =RIGHT( LEFT( A3, FIND( $A$1, A3 ) - 2 ), LEN( LEFT( A3, FIND( $A$1, A3 ) - 2 ) ) - FIND( $B$1, LEFT( A3, FIND( $A$1, A3 ) ) ) - 20 )

    – Знаешь
    22 часов назад

Для этого есть несколько решений. Я собрал их все в этой статье, когда рассматривал адресную строку, разделенную запятыми.

http://www.mkrgeo-blog.com/good-way-to-sanitizing-a-bulk-address-list-part-1-excel-vba/

Думаю, вы могли бы рассмотреть функцию FILTERXML:

   =FILTERXML(“<t><s>”&SUBSTITUTE(F1,”, “,”</s><s>”)&”</s></t>”,”//s[position()=last()-1]”)

или функция MID, как вы сказали:

   =MID(A1, SEARCH(“,”,A1) + 1, SEARCH(“,”,A1,SEARCH(“,”,A1)+1) – SEARCH(“,”,A1)-1)

хотя разница между функцией MID и FILTERXML значительна, поскольку функция MIN () позволяет нам извлекать текст сразу после появления первого символа. Используя функцию FILTERXML (), вы можете извлечь строку из любого случайного места в вашей длинной строке, если вы не потерялись при вычислении порядка. Каждое конкретное вхождение символа, при этом пробел следует считать слева направо.

В случае, если вам нужны две подстроки из середины основной строки, вы можете развернуть приведенные выше формулы:

       =TEXTJOIN(“, “,,FILTERXML(“<t><s>”&SUBSTITUTE(A1,”, “,”</s><s>”)&”</s></t>”,”//s[position()=2 or position() =3]”))

где добавляя функцию TEXTJOIN (), у вас будет все в одной ячейке (не проливается).

        =MID(A1, SEARCH(“,”,A1) + 1, SEARCH(“,”,A1,SEARCH(“,”,A1,SEARCH(“,”,A1)+1)+1) – SEARCH(“,”,A1)-1)

Смотрите больше подсказок здесь:

https://www.ablebits.com/office-addins-blog/2016/06/01/split-text-string-excel/

https://stackoverflow.com/questions/61837696/excel-extract-substrings-from-string-using-filterxml

https://stackoverflow.com/questions/65955114/vba-excel-if-condition-for-splitting-address-columns

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *