Я пытаюсь собрать UDF в Scala, который берет столбец из фрейма данных и обрабатывает его, чтобы удалить HTML и другие бесполезные фрагменты текста.Удалите весь текст из строки после последовательности слов в Scala
Столбец Мне нужно изменить очень неаккуратно, иногда есть HTML, иногда нет ... Поиск SO Я нашел регулярки решения remove HTML
, что я хотел бы достичь в настоящее время является найти регулярное выражение, которое может найти определенное слово в тексте и удалить весь текст после этого слова.
Я думаю, что я понял из this SO answer, что регулярное выражение должно быть что-то вроде \).*
, если вы хотите, чтобы удалить все после )
, так что я пытаюсь адаптировать это к моему делу, но безуспешно из-за мое отсутствие знаний о регулярных выражениях.
У меня есть строки, как:
I am interested to hear from you, thanks Sent from iPhone other stuff I want to delete....
Я хотел бы сохранить первую часть строки до «Направлено из» исключены, так идеальный результат будет:
I am interested to hear from you, thanks
То, что я до сих пор что-то вроде:
val toStringNoHTML = udf[String, String](_.toString
// code from SO as linked above
.replaceAll("""<(?!\/?a(?=>|\s.*>))\/?.*?>""", " ")
// delete all text after key word
.replaceAll("""'Sent from'.*""", "")
// remove all punctuation
.replaceAll("""[\p{Punct}\n]""", " ")
)
в то время как HTML получает удалить, то «Направлено» и весь текст после того, как делает не. Любой намек на то, как настроить регулярное выражение, чтобы заставить его работать?
EDIT как было указано в комментарии, небольшой опечатка предотвращено код, чтобы работать, спасибо за помощь:
.replaceAll("""'Sent from'.*""", "")
должен быть
.replaceAll("""Sent from.*""", "")
просто удалите знаки '' 'из' Sent from': .replaceAll ("" "Отправлено с. *" "", "") ' –
' val toStringNoHTML = udf [String, String] (_. ToString .replaceAll ("" "<(?!\/?a(?=> | \ s. *>)) \ /?. *?>" "", "") .replaceAll ("Отправлено из (. *)", "") .replaceAll ("[\ p {Punct} \ n] "," "))' – mrsrinivas