删除 R 中除撇号外的所有标点符号

     2023-02-15     63

关键词:

【中文标题】删除 R 中除撇号外的所有标点符号【英文标题】:Remove all punctuation except apostrophes in R 【发布时间】:2012-01-31 14:18:31 【问题描述】:

我想使用 R 的 gsub 从文本中删除除撇号之外的所有标点符号。我对正则表达式相当陌生,但正在学习。

示例:

x <- "I like %$@to*&, chew;: gum, but don't like|[] bubble@#^)( gum!?"
gsub("[[:punct:]]", "", as.character(x))

电流输出(don't 中没有撇号)

[1] "I like to chew gum but dont like bubble gum"

期望的输出(我希望撇号不要留下)

[1] "I like to chew gum but don't like bubble gum"

【问题讨论】:

【参考方案1】:
x <- "I like %$@to*&, chew;: gum, but don't like|[] bubble@#^)( gum!?"
gsub("[^[:alnum:][:space:]']", "", x)

[1] "I like to chew gum but don't like bubble gum"

上面的正则表达式更直接。它将所有不是字母数字符号、空格或撇号(插入符号!)的内容替换为空字符串。

【讨论】:

凯你的代码确实删除了撇号。这就是我认为你的意思gsub("[^[:alnum:][:space:]'\"]", "", x) 我喜欢这种编码的直接性。 +1 -- 在我看来,这里的想法是最清晰的解决方案。只需编辑第二行以读取gsub("[^[:alnum:][:space:]']", "", x),它就是金色的。 (FWIW,正则表达式中不需要反斜杠)。 当然,如果您的文本包含非 ascii 字符(例如,多个脚本中的文本),这个答案就会不正常【参考方案2】:

这是一个例子:

>  gsub("(.*?)($|'|[^[:punct:]]+?)(.*?)", "\\2", x)
[1] "I like to chew gum but don't like bubble gum"

【讨论】:

正是我所希望的。比我想象的要复杂得多。难怪我遇到了麻烦。我真的会分解你所做的。谢谢。 最后这将是最简单的方法gsub(".*?($|'|[^[:punct:]]).*?", "\\1", x) 感谢您的跟进。它和第一个一样好用,而且更容易理解。 +1【参考方案3】:

您可以使用双重否定从 POSIX 类 punct 中排除撇号:

[^'[:^punct:]]

代码:

x <- "I like %$@to*&, chew;: gum, but don't like|[] bubble@#^)( gum!?"
gsub("[^'[:^punct:]]", "", x, perl=T)

#[1] "I like to chew gum but don't like bubble gum"

ideone demo

【讨论】:

【参考方案4】:

主要是为了多样化,这里有一个使用来自同名的好包的gsubfn() 的解决方案。在这个应用程序中,我只是喜欢它所允许的解决方案的表现力:

library(gsubfn)
gsubfn(pattern = "[[:punct:]]", engine = "R",
       replacement = function(x) ifelse(x == "'", "'", ""), 
       x)
[1] "I like to chew gum but don't like bubble gum"

(这里需要参数engine = "R",否则将使用默认的tcl引擎。它匹配正则表达式的规则略有不同:例如,如果它用于处理上面的字符串,则需要改为设置pattern = "[[:punct:]$|^]"。感谢 G. Grothendieck 指出了这个细节。)

【讨论】:

一个警告——由于某种原因,字符类[:punct:],当用于gsubfn() 调用的pattern 参数时,与字符$| 不匹配,或^,就像调用gsub()一样。因此,我不得不“手动”添加它们。 gsubfn 默认使用 tcl 正则表达式。如果您希望使用 R 正则表达式,请使用参数 engine = "R" @G.Grothendieck -- 感谢您指出这一点。我已将其合并到我的答案中。我采用了?gsubfn 中的文档,其中指出pattern: Same as 'pattern' in 'gsub' 意味着应该以相同的方式指定模式。现在我明白了这是什么意思,但想知道那里的附加行是否有帮助。像If engine="R", character strings will be matched as documented by 'help(regex)'. If the default tcl engine is used, patterns will be matched as documented at ... 这样的东西。无论如何,感谢您在包上所做的工作!

提取R数据框中除数字以外的所有列[重复]

】提取R数据框中除数字以外的所有列[重复]【英文标题】:ExtractallcolumnsexceptnumericinRdataframe[duplicate]【发布时间】:2021-04-2007:24:18【问题描述】:在我的项目中,我想从我的R数据框中提取除数字之外的所有列,因为this问题我使... 查看详情

删除目录中除 .bat 以外的所有文件

】删除目录中除.bat以外的所有文件【英文标题】:Deleteallfilesindirectoryexcept.bat【发布时间】:2021-06-1121:10:13【问题描述】:我想删除Windows上的特定目录。我使用下面的代码。它工作正常。我想将为此进程创建的.bat文件放在该目... 查看详情

删除 MySQL 中除 One 之外的所有重复行? [复制]

】删除MySQL中除One之外的所有重复行?[复制]【英文标题】:DeleteallDuplicateRowsexceptforOneinMySQL?[duplicate]【发布时间】:2011-06-0818:46:30【问题描述】:如何从MySQL表中删除所有重复数据?例如,使用以下数据:SELECT*FROMnames;+----+--------... 查看详情

如何删除 Core Data 存储中除一个对象之外的所有对象?

】如何删除CoreData存储中除一个对象之外的所有对象?【英文标题】:HowcanIdeleteallbutoneobjectinaCoreDatastore?【发布时间】:2012-06-0615:52:03【问题描述】:是否有一种有效的方法可以删除CoreData存储中除一个或几个对象之外的所有对... 查看详情

删除 VIM 中除第一列之外的所有内容

】删除VIM中除第一列之外的所有内容【英文标题】:RemoveeverythingbutthefirstcolumninVIM【发布时间】:2012-12-0304:53:45【问题描述】:我有一个文本文件,我想删除除每行的第一个单词之外的所有单词,但我不知道该怎么做。所以,如... 查看详情

如何删除目录中除文件和目录列表之外的所有内容?

】如何删除目录中除文件和目录列表之外的所有内容?【英文标题】:howtoremoveeverythinginsidedirectoryexceptalistoffilesanddirectories?【发布时间】:2022-01-2209:11:24【问题描述】:我需要删除dist/文件夹中的所有内容,manifest.json和index.html... 查看详情

Solr 如何删除数组中除记录外的所有记录?

】Solr如何删除数组中除记录外的所有记录?【英文标题】:SolrHowtodeleteallrecordsEXCEPTonesinanarray?【发布时间】:2011-03-3003:52:25【问题描述】:我有一个SolrPhpClient用于与Solr通信。我可以很容易地进行查询,例如:$solr->deleteByQuery(... 查看详情

php删除字符串中除数字之外的所有内容(代码片段)

查看详情

删除 perl XML::Twig 中除一个节点外的所有节点

】删除perlXML::Twig中除一个节点外的所有节点【英文标题】:removingallbutonenodeinperlXML::Twig【发布时间】:2018-03-0108:54:40【问题描述】:我有一个包含许多level3元素的xml文件。我想删除除一个这样的元素之外的所有元素。我的xml文... 查看详情

用于删除目录中除指定列表之外的所有文件夹的批处理文件

】用于删除目录中除指定列表之外的所有文件夹的批处理文件【英文标题】:Batchfiletodeleteallfoldersinadirectoryexceptaspecifiedlist【发布时间】:2011-11-2202:58:17【问题描述】:我正在寻找一个批处理文件,该文件将进入C:\\DocumentsandSettin... 查看详情

有没有办法删除Python中字符串中除字母之外的所有字符?

】有没有办法删除Python中字符串中除字母之外的所有字符?【英文标题】:IsthereawaytoremoveallcharactersexceptlettersinastringinPython?【发布时间】:2014-06-0206:18:08【问题描述】:我调用了一个函数,该函数返回包含从(到"、and和数字的各... 查看详情

如何删除 Firebase 节点中除最近的 X 子节点之外的所有子节点?

】如何删除Firebase节点中除最近的X子节点之外的所有子节点?【英文标题】:HowtodeleteallbutmostrecentXchildreninaFirebasenode?【发布时间】:2015-11-2407:27:11【问题描述】:假设一个Firebase节点lines填充了唯一ID子节点(来自push()操作),... 查看详情

关闭 Emacs 中除当前缓冲区之外的所有缓冲区

...使用CxCb列出所有缓冲区,使用d将列表中的缓冲区标记为删除,然后使用x删除它们 查看详情

如何用c语言将字符串中除字母的其他符号删除

急建立一个for循环,从下标为0开始逐字检测字符串元素,对应的ASCII码在'a'(97)至'z'(122)之间的是小写字母,在'A'(65)至'Z'(90)之间的是大写字母,是字母的依次存入同一个数组,问题就解决了。举例代码如... 查看详情

用 pandas 替换字符串中除最后一个字符之外的所有字符

...das【发布时间】:2018-05-2812:40:13【问题描述】:使用Pandas删除字符串中除最后一个句点之外的所有句点,如下所示:s=pd.Series([\'1.234.5\',\'123.5\',\'2.345.6\',\'678.9\'])co 查看详情

去除数组中除第一个负数的所有负数

快学Scala上讲解,优点繁琐。应用数组的差集简单很多。scala>valarr=Array(1,2,3,4,5,-1,6,-2,7,-3,8,-4,9,-5)arr:Array[Int]=Array(1,2,3,4,5,-1,6,-2,7,-3,8,-4,9,-5)scala>valr=arr.filter(_<0)r:Array[Int]=Array(-1,-2,-3,-4, 查看详情

如何使用 TSQL 截断数据库中除查找表之外的所有表?

...题描述】:在SQLServer2012及更低版本中使用TSQL从所有表中删除除查找表数据之外的所有数据的最佳方法是什么?我希望TSQL识别并排除查找表,然后为其他表创建截断表语句。**几乎有a 查看详情

如何删除数组索引中除第0条以外的所有记录?(代码片段)

根据代码,我不想删除第0条记录,删除其余记录。但它是删除所有的记录!请帮助我犯的错误。这里是代码。list<account>scope=[SelectId,(Selectid,CreatedDate,ebMobile__FileType__c,ebMobile__Account__cfromFiles__rorderbyCreatedDateDESC)fromaccountwhereidin('0... 查看详情