假设我有一个类似“a B C(123-456-789)”的字符串,我想知道从中检索“123-456-789”的最佳方法是什么。
strsplit("A B C (123-456-789)", "\\(")
[[1]]
[1] "A B C" "123-456-789)"
如果我们想提取大括号之间带有-
的数字,一个选项是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-789
或123-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来做到这一点 注意: 诀