Вы можете использовать Power Query для решения проблемы. Power Query доступен в Excel 2010 Professional Plus и более поздних версиях Excel, включая Excel 2013.
Обратите внимание, что следующее решение работает при условии, что каждая целевая строка содержит прямую черту /
и целевая строка разделяется пробелом " "
с другими словами в тексте .
Поэтому мое решение не будет работать в следующих случаях:
I need to remove this www.test.com from the sentence.
Мое решение не может обнаружить ссылку без косой черты /
.
или
I need to remove thishttp://www.test.com from the sentence.
Мое решение удалит thishttp://www.text.com
из предложения, если оно естьнет пробела между this
и ссылкой.
или
I/TerryW need to remove this www.test.com from the sentence.
Мое решение удалит I/TerryW
из предложения, но не ссылку, которая содержит предыдущаякосая черта "/".
Если вы можете терпеть вышеуказанные ограничения, давайте начнем:
- Загрузите ваши данные (это столбец с тысячами строк) вредактор Power Power;
- Добавитьn Индексный столбец для назначения уникального номера каждой строке;
- Использование Заменить значения на вкладке
Transform
для замены специальных символов, таких как Line Break
илиCarriage Return
с пробелом " "
, повторите этот шаг столько раз, сколько необходимо, чтобы убедиться, что между целевой строкой и другими словами есть пробел; - Используйте функцию Split Columns дляразделите столбец по пробелу
" "
и убедитесь, что результаты добавлены в Строки в расширенном параметре; - Добавьте пользовательский столбец с помощью этой функции
=Text.Contains([Column1],"/")
где [Column1]
- столбец, разбиваемый на последнем шаге. Эта функция вернет TRUE
для строки, содержащей косую черту /
; - Фильтр настраиваемый столбец для отображения только
FALSE
результатов; - Использование Группировка по функция для группировки
[Column1]
по столбцу индекса, как показано ниже:
Вернитесь к последнему шагу в редакторе мощных запросов, перейдите на панель формул и замените эту часть формулы
List.Sum([Column1])
на
Text.Combine([Column1]," ")
и удалите столбец индекса;
После этого вы можете закрыть и загрузить вывод на новый рабочий лист (по умолчанию).
Вот примеры данных, которые я использовал:
String1
Caller reported trouble completing form as a requirement of their job. Remoted in to the callers desktop and attempted various fixes with no success. Eventually found a fix on an external website that corrected the issue. https://troubleshootingfixfoundhere.com/!this_should_fix_the_issue_or_it_may_not32_40maybe
The caller was able to fix own problem by using the steps found on that website
String2
01-18-2009 13:17:09 – Jim Bob (Work notes) Request is completed. This PTASK can be closed. 01-18-2009 13:16:08 – Jim Bob (Work notes) Request RITM9999999 created for DVR team to create a incidents in case below two URL's have failures xyz-zyx-iib.xyzint.net:7501/xyz/xyz/authenticatePin xyz-xyz-iib.xyzint.net:7501/xyz/xyz/activatePin
String3
01-25-1942 09:26:06 - Van Shoes (Work notes) 1.disabled the services that should not be running BDO side: 1.alarming is tuam to enable integration and email alarming is turned on. 2.An EMA service request has been created servicenow.xyzint.net/… for service integration. onenote:bdo.wss.xyzint.net/sites/RUN/DistributedServices/ContactCenter/…{D0333A-900-4C8-83E-45A6B0}&page-id={8D646}&end
И вот мой результат:
Вот коды мощности M запросов за сценой только для справки:
let
Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 1, 1),
#"Replaced Value" = Table.ReplaceValue(#"Added Index","#(lf)"," ",Replacer.ReplaceText,{"Column1"}),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Replaced Value", {{"Column1", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1", type text}}),
#"Added Custom" = Table.AddColumn(#"Changed Type1", "Custom", each Text.Contains([Column1],"/")),
#"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] = false)),
#"Grouped Rows" = Table.Group(#"Filtered Rows", {"Index"}, {{"Combined", each Text.Combine([Column1]," "), type text}}),
#"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"Index"})
in
#"Removed Columns"
На самом деле, есть обходные пути для ограничений, которые я упоминал ранее. Например, вы можете использовать функцию Text.Replace
в редакторе PQ, чтобы заменить http
на (space)http
, чтобы добавить пробел перед каждой целевой строкой, и вы можете добавить дополнительный шаг, чтобы оценить длину всех строк, которые содержат впередкосая черта /
, и обычно ссылка http будет иметь большую длину, чем натуральное слово, поэтому вы можете исключить случай, когда между словами природы используется /
. Извините за то, что ленивый, но учитывая, что выборочных данных недостаточно (и у меня заканчивается свободное время), я не буду разрабатывать все возможные решения.
Дайте мне знать, если у вас есть какие-либо вопросы. Ура :) 1123 *