Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何删除一个字符串中的特殊字符、空格和修剪R中的字符变量_Regex_R - Fatal编程技术网

Regex 如何删除一个字符串中的特殊字符、空格和修剪R中的字符变量

Regex 如何删除一个字符串中的特殊字符、空格和修剪R中的字符变量,regex,r,Regex,R,我在R中有一个小问题,变量是字符类型。数据框中的变量具有如下结构: X1 ANGLO AUTOMOTRIZ S.A. MATRIZ AUTOMOTORES Y ANEXOS / AYASA ECUA - AUTO S.A. MATRIZ METROCAR S.A. 10 DE AGOSTO MOSUMI LA "Y" X2 ANGLOAUTOMOTRIZSAMATRIZ AUTOMOTORESYANEXOSAYASA ECUAAUTOSAMATRIZ METROCARSA10DEAGOSTO

我在R中有一个小问题,变量是字符类型。数据框中的变量具有如下结构:

X1
ANGLO AUTOMOTRIZ S.A. MATRIZ
AUTOMOTORES Y ANEXOS / AYASA
ECUA - AUTO S.A. MATRIZ
METROCAR S.A. 10 DE AGOSTO
MOSUMI LA "Y"
X2
ANGLOAUTOMOTRIZSAMATRIZ
AUTOMOTORESYANEXOSAYASA
ECUAAUTOSAMATRIZ
METROCARSA10DEAGOSTO
MOSUMILAY
我的问题是我需要一个不带
/-“”
的新变量,并且字符串必须分组在一个不带空格的变量中,如下所示:

X1
ANGLO AUTOMOTRIZ S.A. MATRIZ
AUTOMOTORES Y ANEXOS / AYASA
ECUA - AUTO S.A. MATRIZ
METROCAR S.A. 10 DE AGOSTO
MOSUMI LA "Y"
X2
ANGLOAUTOMOTRIZSAMATRIZ
AUTOMOTORESYANEXOSAYASA
ECUAAUTOSAMATRIZ
METROCARSA10DEAGOSTO
MOSUMILAY

可以在R中进行此操作。谢谢。

尝试
gsub

gsub( "\\.|/|\\-|\"|\\s" , "" , df$X1 )
#[1] "ANGLOAUTOMOTRIZSAMATRIZ" "AUTOMOTORESYANEXOSAYASA" "ECUAAUTOSAMATRIZ"       
#[4] "METROCARSA10DEAGOSTO"    "MOSUMILAY"  
  • \\.
    -匹配文本
  • |
    -或分隔符
  • /
    -匹配
    /
    (无需转义)
  • \\-
    -匹配文字
    -
  • \”
    -匹配文字
  • \\s
    -匹配空白

gsub
是贪婪的,因此它会尝试尽可能多地匹配,并且它还被矢量化,因此您可以一次传递整个列。第二个参数是替换值,在本例中是
,它用零替换所有匹配的字符。

由于您也处理重音字符,我可以想到两个选项:

  • 完全去掉重音字符
  • 使用
    iconv
    尝试将重音字符“音译”为ASCII字符
  • 这两个都是。对于这两个示例,我使用以下示例文本:

    Z <- c("ANGLO AUTOMOTRIZ S.A. MATRIZ", "AUTOMOTORES Y ANEXOS / AYASA",
    "ECUA - AUTO S.A. MATRIZ", "METROCAR S.A. 10 DE AGOSTO", "MOSUMI LA \"Y\"",
    "distribuir contenidos", "proponer autoevaluaciones", "como buzón de actividades")
    
    备选案文2:请注意,“o”已转换为“o”

    注:

    • 为了方便起见,我决定只使用字符类
      [[:punct:]
      [[:space:]
    • 对于第一个选项,您需要
      perl=TRUE
      来识别
      [[:ascii:]
      字符类
    • 选项1中的
      ^
      表示“不”(因此,您可以将其理解为“查找任何非ASCII字符、空格或标点符号的内容,并将其替换为零)

    谢谢@SimonO101,感谢你在一封信中打勾,比如
    我该如何删除它!@Duck,这更难回答,而且取决于确切的编码等。请尝试此页面作为初学者,简单一点:
    gsub(“[^a-zA-Z0-9]”,“,df$X1)
    ^“角色是你最好的朋友@CarlWitthoft的观点很好,但如果我们沿着这条路线走下去,那么甚至可能是
    gsub('[:punt:][]|','',df$X1)
    @AnandaMahto-听起来Duck在问如何从
    á
    (即用
    a
    替换它),而不是如何完全删除字符…+1代表
    iconv(Z,to=“ASCII//translatit”)
    ,感谢您将此添加为答案!