用多个字符分割字符串

时间:2018-07-19 06:15:22

标签: r character delimiter strsplit

我想用一个向量中定义的多个定界符分割一个字符:

text1   <- "aweoiutw839572/)(&2aslk2468" 
text2   <- "147we547iu5erhg24tzu" 
dat <-  rbind(text1, text2)
vector <- c("we", "iu", "24")

结果应为:

var1 del1 var2 del2  var3                del3 var4
a    we   o    iu    tw839572/)(&2aslk   24   68
147  we   547  iu    5erhg               24   tzu

strsplit有什么想法吗?

3 个答案:

答案 0 :(得分:5)

我们可以使用以下模式在strsplit中使用环顾四周:

(?<=we|is|24)|(?<=.)(?=we|iu|24)

上述正则表达式的基本思想是,在当前位置的we|is|24前面或后面进行拆分。需要特别注意的是外部交替左侧(?<=.)后面的多余外观。之所以需要这样做,是因为R在strsplit中实现了超前方式。 See here,以获取更多信息。

text1 <- "aweoiutw839572/)(&2aslk2468"
vector <- c("we", "iu", "24")
terms <- paste0(vector, collapse="|")
regex <- paste0("(?<=", terms, ")|(?<=.)(?=", terms, ")")

strsplit(text1, regex, perl=TRUE)

[[1]]
[1] "a"                 "we"                "o"                
[4] "iu"                "tw839572/)(&2aslk" "24"               
[7] "68"               

Demo

答案 1 :(得分:3)

将向量粘贴在一起以获得gsub后,可以使用(we|iu|24)。这就是我们需要的模式。因此,我们paste(vector,collapse = "|")得到we|iu|24,然后粘贴()。我们将其中的任何一个捕获为组1,并将其替换为后向引用\\1。我们最后使用read.table函数

 read.table(text=gsub(paste0("(",paste(vector,collapse = "|"),")")," \\1 ",dat))

   V1 V2  V3 V4                V5 V6  V7
1   a we   o iu tw839572/)(&2aslk 24  68
2 147 we 547 iu             5erhg 24 tzu

答案 2 :(得分:1)

受Onyambu的启发,重点在于可延展性:

    TextView titleView = new TextView(context);
    titleView.setText(title.equals("") ? res.getString(R.string.app_name) : title);
    titleView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END);

    TextView messageView = new TextView(context);
    messageView.setText(message);
    messageView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
    messageView.setPadding(20, 20, 20, 20);
            // your code

    builder.setIcon(R.mipmap.my_launcher)
            .setCustomTitle(titleView)
            .setView(messageView)
            .setPositiveButton(yesButton, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    mConfirm.run();
                }
            });