Удалите html-теги из вектора, когда чёрно-белые тэги и текст изменятся в r - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть следующий вектор:

vec<-c("\n\t\t\t\n\t\t\t\n\t\t\t\t8900 E Runstack Rd \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tScottsdale,  AZ  \n\t\t\t\t\t85251\n\t\t\t"                              , 
"\n\t\t\t\n\t\t\t\n\t\t\t\t330 Orange Boulevard\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tBeverly Hills,  CA  \n\t\t\t\t\t90212\n\t\t\t"                              , 
"\n\t\t\t\n\t\t\t\n\t\t\t\t645 Newport Center Drive \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tNewport Beach,  CA  \n\t\t\t\t\t92660\n\t\t\t"                              , 
"\n\t\t\t\n\t\t\t\n\t\t\t\t5000 Westlake Depot Road \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tPalo Alto,  CA  \n\t\t\t\t\t94304\n\t\t\t"                              , 
"\n\t\t\t\n\t\t\t\n\t\t\t\t646 Lucern Road\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tSan Diego,  CA  \n\t\t\t\t\t92108\n\t\t\t"                              
)

Я хотел бы удалить все \n и \t.Я попробовал следующее:

str_replace_all(vec, "\n|\t", " ")
[1] "             8900 E Runstack Rd                 Scottsdale,  AZ        85251    "         
[2] "             330 Orange Boulevard                Beverly Hills,  CA        90212    "     
[3] "             645 Newport Center Drive                 Newport Beach,  CA        92660    "
[4] "             5000 Westlake Depot Road                 Palo Alto,  CA        94304    "    
[5] "             646 Lucern Road                San Diego,  CA        92108    " 

Но это преобразовало их в пробел.Я попробовал это:

str_replace_all(vec, "\n|\t", "")
[1] "8900 E Runstack Rd Scottsdale,  AZ  85251"          "330 Orange BoulevardBeverly Hills,  CA  90212"     
[3] "645 Newport Center Drive Newport Beach,  CA  92660" "5000 Westlake Depot Road Palo Alto,  CA  94304"    
[5] "646 Lucern RoadSan Diego,  CA  92108" 

Но обратите внимание, что в некоторых случаях нет пробелов, где нужно (например, индекс 2 330 Orange BoulevardBeverly Hills, CA 90212).Проблема в том, что \n прикреплен к концу некоторого текста, а в других случаях есть пробел.Как я могу заменить \n пробелом только в том случае, если он касается буквы, которая идет непосредственно перед ней, но заменяет ее пробелом при любых других обстоятельствах?Я ищу следующий результат:

[1] "8900 E Runstack Rd Scottsdale,  AZ  85251"          "330 Orange Boulevard Beverly Hills,  CA  90212"     
[3] "645 Newport Center Drive Newport Beach,  CA  92660" "5000 Westlake Depot Road Palo Alto,  CA  94304"    
[5] "646 Lucern Road San Diego,  CA  92108" 

Я могу достичь вышеуказанного, используя str_squish(vec) после выполнения str_replace_all(vec, "\n|\t", " "), но я бы хотел однострочное решение.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Попробуйте: stringr::str_remove_all(vec,"[\n|\t]") Результат: может быть возвращен к вашим данным.

[1] "8900 E Runstack Rd Scottsdale,  AZ  85251"         
[2] "330 Orange BoulevardBeverly Hills,  CA  90212"     
[3] "645 Newport Center Drive Newport Beach,  CA  92660"
[4] "5000 Westlake Depot Road Palo Alto,  CA  94304"    
[5] "646 Lucern RoadSan Diego,  CA  92108" 

В соответствии с комментарием @ Sada93 мы теряем (а) место во втором элементе, по общему признанию, это не лучший подход кзаново ввести пространство, но вот оно:

gsub("BoulevardBeverly","Boulevard Beverly",vec1)#vec1 is the result of the above transformation

Другие способы восстановления пространства: просто для иллюстрации

vec1<-stringr::str_replace_all(vec,"[\n|\t]","")
vec2<-stringr::str_remove_all(vec1," ")
gsub("([0-9])([a-zA-Z])","\\1 \\2",vec2)
0 голосов
/ 15 февраля 2019

Возможна одна строка, но мы теряем читаемость, и она действительно становится более сложной.

gsub("^[\\\n|\\\t]+([0-9a-zA-Z ,]+)[\\\n|\\\t]+([a-zA-Z ,]+)[\\\n|\\\t]+([0-9]{5})[\\\n|\\\t]+$","\\1 \\2 \\3",vec)

Здесь мы используем тот факт, что адрес содержит шаблон

  1. Адрес улицы
  2. Город, штат
  3. 5 цифр Почтовый индекс
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...