“,(?!.*\\))”在 R 中返回 "Invalid Regex" 错误
",(?!.*\\))" returning "Invalid Regex" error in R
我有一个正在使用的字符串,我正在尝试 select 仅 select 括号外的逗号,以便我可以根据它拆分字符串。这是我正在使用的字符串:
"LIVINGSTON (Townships of Brighton, Deerfield, Genoa, Hartland,, Oceola & Tyrone), MACOMB, MONROE, OAKLAND, SANILAC, ST. CLAIR, AND WAYNE COUNTIES"
我正在尝试使用问题标题中提到的正则表达式,但它告诉我它无效。据推测,这是因为应该被转义的右括号被 R 识别为结束匹配组的括号,因此第二个括号将丢弃所有内容。我只是好奇如何解决这个问题。这是我使用的语法:
counties <- "LIVINGSTON (Townships of Brighton, Deerfield, Genoa, Hartland,, Oceola & Tyrone), MACOMB, MONROE, OAKLAND, SANILAC, ST. CLAIR, AND WAYNE COUNTIES"
tmp <- strsplit(counties, ',(?!.*\))')
我显然可以做与我现在正在做的相反的事情,而不是在括号外的逗号上拆分文本,只需替换括号内的逗号,然后在逗号上拆分字符串,但是我想知道为什么这不起作用。
因为你有一个不平衡的 )
,
https://regex101.com/r/jE0lI9/1
应该是:
counties <- "LIVINGSTON (Townships of Brighton, Deerfield, Genoa, Hartland,, Oceola & Tyrone), MACOMB, MONROE, OAKLAND, SANILAC, ST. CLAIR, AND WAYNE COUNTIES"
tmp <- substr(counties, ',(?!.*\)')
我认为您的正则表达式不起作用的原因是因为它非常 Perl-ish,需要 perl=T 标志。我认为它也有点畸形,因为您应该检查左括号和右括号是否完整......我认为这是一个通用的解决方案,不仅适用于您的具体情况:
counties <- "LIVINGSTON (Townships of Brighton, Deerfield, Genoa, Hartland,, Oceola & Tyrone), MACOMB, MONROE, OAKLAND, SANILAC, ST. CLAIR, AND WAYNE COUNTIES"
tmp <- strsplit(counties, ",(?![^(]*\))", perl=T)
如果我没有正确理解问题,试试这个:
strsplit(gsub("\(.*\)", "", counties), ",")[[1]]
我有一个正在使用的字符串,我正在尝试 select 仅 select 括号外的逗号,以便我可以根据它拆分字符串。这是我正在使用的字符串:
"LIVINGSTON (Townships of Brighton, Deerfield, Genoa, Hartland,, Oceola & Tyrone), MACOMB, MONROE, OAKLAND, SANILAC, ST. CLAIR, AND WAYNE COUNTIES"
我正在尝试使用问题标题中提到的正则表达式,但它告诉我它无效。据推测,这是因为应该被转义的右括号被 R 识别为结束匹配组的括号,因此第二个括号将丢弃所有内容。我只是好奇如何解决这个问题。这是我使用的语法:
counties <- "LIVINGSTON (Townships of Brighton, Deerfield, Genoa, Hartland,, Oceola & Tyrone), MACOMB, MONROE, OAKLAND, SANILAC, ST. CLAIR, AND WAYNE COUNTIES"
tmp <- strsplit(counties, ',(?!.*\))')
我显然可以做与我现在正在做的相反的事情,而不是在括号外的逗号上拆分文本,只需替换括号内的逗号,然后在逗号上拆分字符串,但是我想知道为什么这不起作用。
因为你有一个不平衡的 )
,
https://regex101.com/r/jE0lI9/1
应该是:
counties <- "LIVINGSTON (Townships of Brighton, Deerfield, Genoa, Hartland,, Oceola & Tyrone), MACOMB, MONROE, OAKLAND, SANILAC, ST. CLAIR, AND WAYNE COUNTIES"
tmp <- substr(counties, ',(?!.*\)')
我认为您的正则表达式不起作用的原因是因为它非常 Perl-ish,需要 perl=T 标志。我认为它也有点畸形,因为您应该检查左括号和右括号是否完整......我认为这是一个通用的解决方案,不仅适用于您的具体情况:
counties <- "LIVINGSTON (Townships of Brighton, Deerfield, Genoa, Hartland,, Oceola & Tyrone), MACOMB, MONROE, OAKLAND, SANILAC, ST. CLAIR, AND WAYNE COUNTIES"
tmp <- strsplit(counties, ",(?![^(]*\))", perl=T)
如果我没有正确理解问题,试试这个:
strsplit(gsub("\(.*\)", "", counties), ",")[[1]]