拆分项目符号后跟文本到R中的单独行

时间:2017-12-09 21:03:28

标签: r regex

我想将我目前在一行中的项目符号分成几行。

"•xxxx•xxx"应该是

"•xxxx"
"•xxx"

我已尝试用例如n*(n+1)/2但无济于事。

关于如何使用R中的项目符号的任何想法?

2 个答案:

答案 0 :(得分:1)

试试这个:

A<-as.character("• xxxx • xxx")

B<-unlist(strsplit(A, "•"))[-1]

C<- data.frame(paste0("•",B, sep=""))

打印(C) 输出是:

  paste0......B..sep......
1                  • xxxx 
2                    • xxx

答案 1 :(得分:1)

library(stringr); 

vals <- "• xxxx • xxx"; 
print(vals) 

它将返回到Octal Escape序列:

[1] "\342\200\242 xxxx \342\200\242 xxx"

现在,我们必须编写一个可以找到这些ocatal转义序列的正则表达式。 为此,我首先更改编码如下

Encoding(vals)<- "UTF-8"

在打印时会给出这样的值:

[1] "<U+2022> xxxx <U+2022> xxx"

如果您进行快速谷歌搜索,您会发现它是bullet

现在,我们可以为这个utf-8编码的字符串编写一个正则表达式,并根据问题中提供的规则进行拆分,如下所示:

df <- setNames(data.frame(cbind(unlist(str_extract_all(vals,"([\U{2022}])\\s\\w+" )))),"X");

<强>输出:

> df
              X
1 <U+2022> xxxx
2  <U+2022> xxx

这并不奇怪,但是这里可以看到子弹用当前的本地设置打印子弹符号所以我所做的就是这样,在这里更改本地设置(请小心):

oldloc <- Sys.getlocale("LC_CTYPE")
Sys.setlocale("LC_CTYPE", "en_US.UTF-8")
print(df$X) 

结果如下:

> print(df)
       X
1 • xxxx
2  • xxx

在完成上述所有操作之后,我可以说这对于Windows机器来说仍然可能不起作用,但这应该适用于Mac High Sierra。

要使用Windows,我使用了:

library(stringi)
stringi::stri_trans_general(x, "zh")

<强>输出:

stringi::stri_trans_general(df$X, "zh")
[1] "• xxxx" "• xxx" 

参考屏幕截图:

enter image description here