我试图从下面的< code>chr数组中用gsub删除字符串中的模式
articles<-c("RT @name1: hello world", "@nickname1: bye bye guys",
"RT @name2_surname2: I have no text", "Hello!")
模式由@
和:
之间的术语形成,仅在以RT
开头的字符串中。因此,在我们的例子中,模式是:
"name1" "name2_surname2"
该模式可以通过使用
pat <- "^RT.*?@(.*?):.*"
res <- gsub(pat,"\\1",articles[grepl(pat,articles)])
去除此图案后,期望的结果是这样的:
"RT : hello world", "@nickname1: bye bye guys",
"RT : I have no text", "Hello!"
无论如何,当我使用:
gsub(res,"",articles)
我得到了一个错误的结果:
[1] "RT @: hello world" "@nick: bye bye guys"
[3] "RT @name2_surname2: I have no text" "Hello!"
Warning message:
In gsub(res, "", articles) :
argument 'pattern' has length > 1 and only the first element will be used
我们可以将
模式粘贴到单个字符串中,并在gsub
模式中使用它,因为模式
参数没有矢量化,即,它只需要1的长度
gsub(paste0("\\b(", paste(res, collapse="|"), ")\\b"), "", articles)
#[1] "RT @: hello world" "@nickname1: bye bye guys" "RT @: I have no text" "Hello!"
如果所需输出如所述:
"RT : hello world", "@nickname1: bye bye guys", "RT : I have no text", "Hello!"
则此解决方案有效:
首先,您需要更改模式以在捕获组中包含@
:
pat <- "^RT.*?(@.*?):.*"
res <- gsub(pat,"\\1",articles[grepl(pat,articles)])
然后,按照@Akrun的建议,您可以将 res
的两个矢量元素粘贴在一起,这允许您将其用作(单个)模式:
gsub(paste0(res, collapse = "|"), "", articles)
这将为您提供不可靠的输出。
我有以下问题。 如何创建一个名为<code>word</code>的新列,其中仅包含<code>col2</code<中未出现的值?
我在 ifelse 语句中使用带有因子变量的 grepl 不断收到此警告:“参数'模式'有长度 我有这些变量:x7和y7。x7是一个互斥的字符变量,y7是一个不互斥的因子变量,因此是一串数字(0到9)。 x7可以以任何字母结尾,但我想限制为等于Z或J。如果它等于Z,我希望y7以字符串(0,1,2,3,4)中的任何这些值结尾。 下面是我写的: 因此,如果x7是Z,y7是0:4,或者如果x7是J,它是
我正在努力删除字符串中下划线前的子字符串。我想使用*(通配符)作为下划线可以变化之前的位: 结果应该是: 我也尝试过类似“^*”或“?”之类的东西但并没有真正奏效。
问题内容: 我想删除字符串的第一个字符。 例如,我的字符串以a开头,而我只想删除它。字符串中有几次不应删除。 我正在用Python编写代码。 问题答案: python 2.x python 3.x 两张画
问题内容: 如何从字符串中删除除数字以外的所有字符? 问题答案: 在Python 2. *中,到目前为止最快的方法是: 生成一个转换表(长度为256的字符串),在这种情况下,该转换表与(更快地制作;-)相同。应用转换表(这里无关紧要,因为本质上是指身份),并删除第二个参数(关键部分)中存在的字符。 在Unicode字符串(和Python 3中的字符串)上的工作方式大不相同-我 确实 希望指出问题是
我有以下问题:我正在从一个UTF-8文本文件中读取(我告诉Perl,我是通过“:编码(utf-8)”)。 该文件在十六进制查看器中看起来像这样:EF BB BF 43 6F 6E 66 65 72 65 6E 63 65 印刷时翻译成“∩会议”。我知道我被警告的“宽字符”是物料清单。我想摆脱它(不是因为警告,而是因为它搞砸了我稍后进行的字符串比较)。 因此,我尝试使用以下代码删除它,但失败惨重: