заменить текст другим рисунком - PullRequest
1 голос
/ 19 апреля 2020

Я работаю со списком текста, который содержит информацию PII, которая маскируется как XXXX XXXX, это могут быть номера фом ​​или номера адресов. Я хочу снять маску.

x <- c('This is my phone number xxx xxx xxx', 'The account number is XXXXXXXXXX', 'Her age is xx', 'The credit number is xxxx xxxx xxxx xxxx', 'This is the list of accounts xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx')

Я написал что-то подобное, но это не заменяет все:

gsub("(?:\\s+|^)\\S*(?<!\\w)(?:xxxx?|xxxxxxxx)(?!\\w)\\S*", "", x, perl=TRUE)

Как мне улучшить этот код?

ожидаемый результат:

«Это мой номер телефона», «Номер счета», «Её возраст», «Номер кредита», «Это список счетов»

Ответы [ 2 ]

3 голосов
/ 19 апреля 2020
trimws(gsub("x{2,}", "", x, ignore.case = T))

или

trimws(gsub("(x|X){2,}", "", x))

[1] "This is my phone number"      "The account number is"        "Her age is"                  
[4] "The credit number is"         "This is the list of accounts"
3 голосов
/ 19 апреля 2020

Если нам нужно удалить повторяющиеся «x» или («X»), укажите шаблон с границей слова (\\b), за которой следует один или несколько «x» (\\x+) до границы слова (\\b) и замените его пробелом (""). Кроме того, используйте ignore.case = TRUE (который по умолчанию FALSE), чтобы соответствовать верхнему регистру

trimws(gsub("\\bx+\\b", "", x, ignore.case = TRUE))
#[1] "This is my phone number"   
#[2] "The account number is"     
#[3] "Her age is"       
#[4] "The credit number is"        
#[5] "This is the list of accounts"

Если мы используем ноль или более пробелов перед границей слова, то trimws можно удалить

gsub("\\s*\\bx+\\b\\s*", "", x, ignore.case = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...