Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 仅用于替换方括号内逗号的正则表达式_R_Regex_Pcre - Fatal编程技术网

R 仅用于替换方括号内逗号的正则表达式

R 仅用于替换方括号内逗号的正则表达式,r,regex,pcre,R,Regex,Pcre,我有一个文本文件,它包含逗号分隔的字符串。但是一些用逗号分隔的字符串的格式是[*,*,*,…]。例如: “你好”、“再见”、“是”、“不是”、“可能”、“确实”、“为什么”、“什么”] 我希望能够解析该文件,仅用分号替换方括号内的逗号。方括号内可以有任意数量的方括号,方括号内可以有任意数量的逗号 我尝试在R中使用此代码,但它没有按计划工作,我的括号外的一些逗号正在被替换: 重复{ tmp要用分号替换方括号内的所有逗号,可以使用 gsub("(?:\\G(?!^)|\\[)[^][,]*\\K,"

我有一个文本文件,它包含逗号分隔的字符串。但是一些用逗号分隔的字符串的格式是
[*,*,*,…]
。例如:

“你好”、“再见”、“是”、“不是”、“可能”、“确实”、“为什么”、“什么”]

我希望能够解析该文件,仅用分号替换方括号内的逗号。方括号内可以有任意数量的方括号,方括号内可以有任意数量的逗号

我尝试在R中使用此代码,但它没有按计划工作,我的括号外的一些逗号正在被替换:

重复{

tmp要用分号替换方括号内的所有逗号,可以使用

gsub("(?:\\G(?!^)|\\[)[^][,]*\\K,", ";", x, perl=TRUE)
请参阅。上面的正则表达式不检查是否有关闭
]
。如果需要,请使用

gsub("(?:\\G(?!^)|\\[)[^][,]*\\K,(?=[^][]*])", ";", x, perl=TRUE)

详细信息

  • (?:\G(?)\[)
    -上一次匹配的结束(
    \G(?)
    )或(
    )a
    [
    \[
  • [^][,]*
    -0+字符,而不是
    [
    ]
    和a
    ]
  • \K
    -匹配重置运算符,该运算符将丢弃迄今为止匹配的所有文本
  • -逗号
  • (?=[^][]*])
    -正向前瞻,需要0+个字符,而不是当前位置右侧的
    [
    ]
    ,以及一个
    ]

要用分号替换方括号内的所有逗号,您可以使用

gsub("(?:\\G(?!^)|\\[)[^][,]*\\K,", ";", x, perl=TRUE)
请参阅。上面的正则表达式不检查是否有关闭
]
。如果需要,请使用

gsub("(?:\\G(?!^)|\\[)[^][,]*\\K,(?=[^][]*])", ";", x, perl=TRUE)

详细信息

  • (?:\G(?)\[)
    -上一次匹配的结束(
    \G(?)
    )或(
    )a
    [
    \[
  • [^][,]*
    -0+字符,而不是
    [
    ]
    和a
    ]
  • \K
    -匹配重置运算符,该运算符将丢弃迄今为止匹配的所有文本
  • -逗号
  • (?=[^][]*])
    -正向前瞻,需要0+个字符,而不是当前位置右侧的
    [
    ]
    ,以及一个
    ]

这是一个字符串吗这是一个字符串吗谢谢你-这工作得很好-作为一个快速的跟进,我还想知道如果我处理的是花括号({})而不是正方形([]),正则表达式字符串会有什么变化。Keith将每个文本
[
替换为
{
]
替换为
}
”(?:\\G(?!^)\\{[^{},]*\\K,(?=[^{}]*})
@Keith好吧,这与
()
。您需要避开这两种情况。是的,非常感谢!而且我不认为在原始解决方案中这是一个直接的“类似”替换-我一直在玩,并得出了圆括号的答案谢谢-这非常有效-作为一个快速的跟进,我还想知道如果我正在处理正则表达式字符串,会有什么变化用花括号({})代替方括号([])@Keith用
{
替换每个文本
[
“(?:\\G(?)|\\{)[^{},]*\\K,(?=[^{}]*})”
@Keith嗯,这与
不同()
。您需要同时避开这两种情况。是的,非常感谢!而且我认为在原始解决方案中,这不是一种直接的“相似”替代方案—我们在这里讨论了一下,得出了圆括号的答案