当前位置: 首页 > 知识库问答 >
问题:

用括号分隔[重复]

房冥夜
2023-03-14

假设我有一个类似“a B C(123-456-789)”的字符串,我想知道从中检索“123-456-789”的最佳方法是什么。

strsplit("A B C (123-456-789)", "\\(")
[[1]]
[1] "A B C" "123-456-789)"

共有1个答案

孙朗
2023-03-14

如果我们想提取大括号之间带有-的数字,一个选项是str_extract。如果字符串中有多个模式,请使用str_extract_all

 library(stringr)
 str_extract(str1, '(?<=\\()[0-9-]+(?=\\))')
 #[1] "123-456-789"
 str_extract_all(str2, '(?<=\\()[0-9-]+(?=\\))')

在上面的代码中,我们使用regex lookarounds来提取数字和-。正lookbehind(?<=\\()[0-9-]+(123-456-789中的-([0-9-]+)和-([0-9-]+)匹配数字,而不是在123-456-789中。类似地,lookhead([0-9-]+(?=\)')与-中的-匹配数字,但与(123-456-789123-456-789)等情况无关

使用strsplit,可以将split指定为[()]。我们将()保留在方括号内,以便将其视为字符,否则我们必须转义括号('\\(\\)')。

 strsplit(str1, '[()]')[[1]][2]
 #[1] "123-456-789"

如果有多个子字符串要从字符串中提取,我们可以使用lapply循环,并使用grep提取数字拆分部分

 lapply(strsplit(str2, '[()]'), function(x) grep('\\d', x, value=TRUE))

或者我们可以使用stri_split,从stringi,它也可以删除空字符串(omit_empty=true)。

 library(stringi)
 stri_split_regex(str1, '[()A-Z ]', omit_empty=TRUE)[[1]]
 #[1] "123-456-789"

 stri_split_regex(str2, '[()A-Z ]', omit_empty=TRUE)
 library(qdapRegex)
 rm_round(str1, extract=TRUE)[[1]]
 #[1] "123-456-789"
 rm_round(str2, extract=TRUE)
 str1 <-  "A B C (123-456-789)"
 str2 <- c("A B C (123-425-478) A", "ABC(123-423-428)",
 "(123-423-498) ABCDD", 
  "(123-432-423)", "ABC (123-423-389) GR (124-233-848) AK")
 类似资料:
  • 问题内容: 我有以下格式的数据: 因为拿起和零件应该真的很简单,但是我真的很努力。 我已经设法通过使用获得了部分,但正义将不适合我。 如何指定为分隔符? 问题答案: 只需使用定义您可以使用这些:,,或作为字段分隔 通常,您说。 测试

  • 我有一个,其中包含2或3个公司名称,每个名称用括号括起来。每个公司名称也可以包含括号中的单词。我需要用正则表达式将它们分开,但没有找到方法。 我的输入代码: 预期结果是: 我的代码: 这适用于和,但不适用于。 当前结果:

  • 我想到了一个变通办法,用'),‘替换'),然后用','拆分,这将解决我的问题..但我想用一种干净的方式.. 如有任何帮助,不胜感激。

  • 问题内容: 我有一个像 我想把它分成那些字符串 如果我简单地打电话给我,那么在修剪之后我会得到不同的结果,因为在某些字符串中,例如,仍然有一个逗号。但我不想放在方括号中。有解决这个问题的优雅方法吗? 问题答案: 假设和没有嵌套和未转义。您可以使用以下方式进行拆分: 正则演示 如果逗号后面没有非圆括号和,则将匹配逗号,从而忽略和中的逗号。

  • 我有一个长字符串,只要逗号不在方括号或圆括号内,我想通过用逗号将其拆分来将其设置为数组。我已经尝试了一些变化,但没有得到我想要的。。。 例1: 例2:

  • 问题内容: 这个问题已经在这里有了答案 : MySQL:将逗号分隔的列表分成多行 (4个答案) 6年前关闭。 我有一列带有可变数量的逗号分隔值: 我希望结果采用每个值,并创建一行: 如何在SQL(MySQL)中执行此操作? (我曾尝试使用谷歌搜索“内爆”和“侧面视图”,但是这些似乎并没有出现相关问题。所有相关的SO问题都在尝试做更复杂的事情) 问题答案: 您可以使用纯SQL来做到这一点 注意: 诀