我有一个文本文件,它包含逗号分隔的字符串。但是,一些用逗号分隔的字符串的格式为[*,*,*,...]
。例如:
“你好”,“再见”,[是”,“否”,“也许”,“确实”,[“为什么”,“什么”]
我希望能够解析该文件,以用分号仅替换方括号内的逗号。括号内可以有任意数量的括号和逗号。
我尝试在R中使用此代码,但无法按计划工作,括号内的一些逗号已被替换:
repeat{
tmp <- gsub("(\\[.*\\K),(?=.*\\])", ";", tmp, perl = TRUE) # replace last comma found within braces with semicolon
if (sum(grepl("(\\[.*\\K),(?=.*\\])", tmp, perl = TRUE)) == 0) { # repeat until no more commas found
break
}
}
任何人都可以使用正则表达式来解决此问题吗?谢谢!
答案 0 :(得分:4)
要将方括号内的所有逗号替换为分号,可以使用
gsub("(?:\\G(?!^)|\\[)[^][,]*\\K,", ";", x, perl=TRUE)
请参见regex demo。上面的正则表达式不会检查结束]
。如果需要,请使用
gsub("(?:\\G(?!^)|\\[)[^][,]*\\K,(?=[^][]*])", ";", x, perl=TRUE)
详细信息
(?:\G(?!^)|\[)
-上一场比赛(\G(?!^)
或(|
)a [
(\[
)的结尾[^][,]*
-除[
和]
和]
以外的0个字符\K
-匹配重置运算符,该运算符将舍弃到目前为止已匹配的所有文本,
-逗号(?=[^][]*])
-一个正向超前查询,除了[
和]
之外,还需要0个以上的字符,并且紧接当前位置右侧的]
。