我想用一个向量中定义的多个定界符分割一个字符:
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
有什么想法吗?
答案 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"
答案 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();
}
});