gpt4 book ai didi

r - 如何在方括号外用破折号分隔字符串

转载 作者:行者123 更新时间:2023-12-04 11:12:24 24 4
gpt4 key购买 nike

我想拆分如下字符串:

x <- "abc-1230-xyz-[def-ghu-jkl---]-[adsasa7asda12]-s-[klas-bst-asdas foo]"

by dash ( - ),条件是这些破折号不能包含在一对 [] 中。预期的结果是
c("abc", "1230", "xyz", "[def-ghu-jkl---]", "[adsasa7asda12]", "s",
"[klas-bst-asdas foo]")

笔记:
  • 方括号之间没有嵌套。
  • 方括号可以包含除方括号之外的任何字符/数字/符号。
  • 字符串的其他部分也是可变的,所以我们只能假设当它不在 - 内时我们被 [] 分割。

  • python ( How to split a string by commas positioned outside of parenthesis? ) 有一个类似的问题,但我还没有能够根据我的情况准确地调整它。

    最佳答案

    您可以使用前瞻来验证没有 ][ 更早:

    -(?![^[]*\])

    所以在 R 中:

    strsplit(x, "-(?![^[]*\\])", perl=TRUE)

    解释:
  • - : 匹配连字符
  • (?! ) : 否定前瞻:如果在先前匹配的连字符之后找到该部分,则连字符的匹配无效。
  • [^[] : 匹配任何不是 [
  • 的字符
  • * : 匹配任意数量的前一个
  • \] :匹配文字 ] 。如果匹配,则意味着我们在找到 ] 之前找到了 [ 。由于所有这些都发生在负面展望中,这里的匹配意味着连字符不是匹配。请注意, ] 是正则表达式中的特殊字符,因此必须使用反斜杠对其进行转义(尽管它无需转义即可工作,因为引擎知道在它之前没有匹配的 [ —— 但我更愿意明确说明它是一个字面)。由于反斜杠在字符串文字中具有特殊含义(它们也表示转义),该反斜杠本身必须在此字符串中再次转义,因此它显示为 \\]
  • 关于r - 如何在方括号外用破折号分隔字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46092292/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com